如何删除 nan 值并将下行与实时数据框中的上行合并?

How to remove nan values and merge lower rows with upper rows in a live dataframe?

我正在尝试自动化交易策略。我正在使用 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 值,如下图所示-

After joining DataFrames.jpg

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

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

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

Datetime grouping.jpg

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

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

尝试将您的连接更改为:

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

在你得到 InvalidIndexError 的情况下:

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

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

df.join(df1)

忠告: 如果您尝试从 2 个不同的数据帧生成数据帧,那么在使用 join()concat() 之前重置索引是个好习惯数据框。