python - 在 pandas 中将时间序列数据一分为二时出错
问题描述
我有来自 Binance 的流式时间序列数据(BTCUSDT 价格),格式DataFrame
如下。
导入模块后的初始代码
def btc_pairs_trade(msg):
if msg['e'] != 'error':
price['BTCUSDT'].loc[len(price['BTCUSDT'])] = [pd.Timestamp.now(),
float(msg['c'])]
bn=price['BTCUSDT']
return bn
else:
price['error'] = True
和
bsm = ThreadedWebsocketManager()
bsm.start()
bsm.start_symbol_ticker_socket(symbol='BTCUSDT', callback=btc_pairs_trade)
和
## main
while len(price['BTCUSDT']) == 0:
# wait for WebSocket to start streaming data
sleep(0.1)
sleep(10)
date price change
0 2021-10-14 07:41:55.963626 57531.56 -100.18
1 2021-10-14 07:41:56.965003 57531.56 -100.18
2 2021-10-14 07:41:56.971939 57531.56 -100.18
3 2021-10-14 07:41:57.964664 57531.57 -100.18
4 2021-10-14 07:41:57.968422 57531.57 -100.18
这个想法是回到由now
减去 5 分钟确定的“开始时间”,使用pd.timedelta
. 然后创建一个新DataFrame
的来保存start_time
和 now 之间的数据,即df2
. 从那里我继续我的if
条件,使用新创建的价格运行任务DataFrame
。代码片段如下。
df = price['BTCUSDT']
start_time = df.date.iloc[-1] - pd.Timedelta(minutes=5)
df2 = df.loc[df.date >= start_time]
if df2.price.iloc[0]-df2.price.iloc[-1]>100:
try:
elif df2.price.iloc[0]-df2.price.iloc[-1]<-100:
try:
问题是当我运行代码时出现以下错误。
---> 11 df2 = df.loc[df.date >= start_time]`
ValueError: cannot reindex from a duplicate axis
我认为错误是因为将第二个 DataFrame 命名为第一个,所以我将第二个更改为 df2。(我使用过 df1),但我仍然遇到同样的问题。有时代码会成功运行,但会出现以下警告。
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
我如何对问题进行排序?
解决方案
推荐阅读
- vue.js - Vuex registerModule 方法注册一个空模块
- python - 我无法打开 snowsql,因为它收到 ModuleNotFoundError 之类的错误
- python - 无法正确读取 json 文件
- javascript - querySelectorAll 和具有相同类的多个元素
- c# - 如何从 TabControl 获取所选 TabItem 的文本块名称
- python - 即使没有断点,Spyder 调试器也会停止
- java - Java 内置 JSON 解析器
- javascript - 未捕获的类型错误:无法读取 null XMLHttpRequest JAVASCRIPT 的属性“项目”
- r - 我对 glm 的 anova 测试的软件 R 有问题
- python - def() Python 中超过 2 条返回规则