code: def process_quote(self, data):
          
          for ix, row in data.iterrows():
              symbol = row['code']
  
              tick = self._tick_dict.get(symbol, None)
              if not tick:
                  tick = TinyQuoteData()
                  tick.symbol = symbol
                  self._tick_dict[symbol] = tick
  
              tick.date = row['data_date'].replace('-', '')
              tick.time = row['data_time']
              # with GLOBAL.dt_lock:
              if tick.date and tick.time:
                  tick.datetime = datetime.strptime(' '.join([tick.date, tick.time]), '%Y%m%d %H:%M:%S')
              else:
                  return
  
              tick.openPrice = row['open_price']
              tick.highPrice = row['high_price']
              tick.lowPrice = row['low_price']
              tick.preClosePrice = row['prev_close_price']
              # 1.25 新增摆盘价差，方便计算正确的订单提交价格 要求牛牛最低版本 v3.42.4961.125
              if 'price_spread' in row:
                  tick.priceSpread = row['price_spread']
  
              tick.lastPrice = row['last_price']
              tick.volume = row['volume']
  
              new_tick = copy(tick)
              self._notify_new_tick_event(new_tick)
docs: 报价推送