首页 > 解决方案 > 如何删除 nan 值并将较低行与实时数据框中的较高行合并?

问题描述

我正在尝试自动化交易策略。我正在使用 Angelbroking 股票市场 API 创建实时数据框。

我使用的 API 只获取不包括日期的高低收盘值。因此,我将 python 时间程序与 API 混合以获取当前日期时间和 OHLC 值。以下是我正在处理的代码-

while (True):
#below code fetches current date and time 
IST = pytz.timezone('Asia/Kolkata')
datetime_ist = datetime.now(IST)
Datetime=datetime_ist.strftime('%Y/%m/%d %H:%M:%S')

#API to fetch last traded price(LTP)of a stock
exchange = "NSE"
tradingsymbol = "SBIN-EQ"
symboltoken = 3045
a=SmartApi.ltpData("NSE", "SBIN-EQ", "3045")

#creating datetime and LTP DataFrames
df = pd.DataFrame([a['data']])
df1= pd.DataFrame([Datetime])
df1.columns = ['Datetime']

#joining both DataFrames
df2 = pd.concat([df1, df])

在加入 DataFrames df 和 df1 之后,我在两行中都得到了 Nan 值,如下图所示 -

加入DataFrames.jpg后

因此,我尝试对数据进行分组以删除 Nan 值。

#Grouping the data
df3=df2.groupby('Datetime').max().reset_index()
display(df3)

现在,对日期时间进行分组仅输出日期时间并在 OHLC 列中显示 Nan 值,当我对 OHLC 列进行分组时,我在日期时间列中得到 Nan,如下所示

日期时间分组.jpg

作为 python 的初学者,我无法理解我错过了什么或做错了什么。

标签: pythondataframeapigroup-bynan

解决方案


您似乎正在尝试将相同长度的日期时间列附加到 OHLC 数据帧。axis=0用于行,而axis=1用于列。默认情况下,pandas 使用axis=0,因此您需要将首选更改指定为axis=1.

尝试将您的 concat 更改为:

df2 = pd.concat([df1, df], axis=1)

在您获得的情况下InvalidIndexError

pd.concat([df1.reset_index(), df], axis=1) 

另一种方法是简单地使用join()

df.join(df1)

忠告:在使用之前join()concat()尝试从 2 个不同的数据帧生成数据帧时,最好重置索引。


推荐阅读