如何在实时DataFrame中移除NaN值并合并上下行数据
问题根因
你使用pd.concat([df1, df])时默认是垂直行堆叠拼接,两个待拼接的DataFrame列完全不重叠:df1只有Datetime列,df只有OHLC相关列,因此拼接后会生成两行数据:第一行仅Datetime有值,其余OHLC列全为NaN;第二行仅OHLC列有值,Datetime列为NaN。你后续用分组去NaN的思路完全是走偏了,本质是拼接方式用错了。
最优解决方法
完全不需要创建两个DataFrame再拼接,直接给接口返回的行情DataFrame新增Datetime列即可,修改代码如下:
while (True): # 获取印度标准时间 IST = pytz.timezone('Asia/Kolkata') datetime_ist = datetime.now(IST) Datetime = datetime_ist.strftime('%Y/%m/%d %H:%M:%S') # 调用接口拿行情数据 exchange = "NSE" tradingsymbol = "SBIN-EQ" symboltoken = 3045 a = SmartApi.ltpData("NSE", "SBIN-EQ", "3045") # 直接构造完整DataFrame,无需拼接 df = pd.DataFrame([a['data']]) df['Datetime'] = Datetime # 后续直接用df即可,没有任何NaN值 display(df)
如果你坚持要拼接两个DataFrame
需要指定按列水平拼接,给pd.concat加axis=1参数即可:
df2 = pd.concat([df1, df], axis=1)
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

