python - 如何删除 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 值,如下图所示 -
因此,我尝试对数据进行分组以删除 Nan 值。
#Grouping the data
df3=df2.groupby('Datetime').max().reset_index()
display(df3)
现在,对日期时间进行分组仅输出日期时间并在 OHLC 列中显示 Nan 值,当我对 OHLC 列进行分组时,我在日期时间列中得到 Nan,如下所示
作为 python 的初学者,我无法理解我错过了什么或做错了什么。
解决方案
您似乎正在尝试将相同长度的日期时间列附加到 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 个不同的数据帧生成数据帧时,最好重置索引。
推荐阅读
- python - 如何在 Visual Studio Code 中自动停止 RUN CODE?
- julia - 如何从 JuMP 中的每次迭代中获取值
- php - PDO WHERE 条件拒绝获取行
- python - 为什么我的函数会剥离 dir 属性,尽管它在我的允许属性列表中?
- ansible - 如何通过 ansible 生成 MC 配置
- android - 使用路径从文件内部存储目录中的 zip 获取文件
- python - 比特币地址转换为 RIPEMD160
- python - md5 哈希模块问题 - python
- matlab - 在轴上预览网络摄像头 - 消失我的 x 和 y 轴
- postgresql - 如何将一个表中的聚合保留在另一个表中