python - 不一致 - 从数据框中删除行仅部分有效
问题描述
我为使用熊猫的不一致而发疯。
我正在使用一组从 csvs 读取到数据帧的时间序列。每个数据帧都有一个 DateTime 索引,我将数据帧分配给一个列表,以便我可以在循环等中使用:
timeseries_list = [yval, yhat_lstm, yhat_linreg, yhat_gbm, yhat_cnn, yhat_phys]
timeseries_name = ['yval', 'yhat_lstm', 'yhat_linreg', 'yhat_gbm', 'yhat_cnn', 'yhat_phys']
然后我进行了一些数据处理和清理,其中我删除了 yhat_lstm 的第一行,使其与所有其他数据帧的形状相匹配:
yhat_lstm = yhat_lstm.iloc[1:]
[in] yhat_lstm.shape
[out] (3341, 24)
这就是问题所在:当我在 timeseries_list 中循环时,yhat_lstm似乎出于某种原因具有它的原始形状,即 (3342,24)。这给我带来了巨大的问题。
例子:
[in] for i,v in enumerate(timeseries_list):
print (i, timeseries_name[i], v['0'].size)
[out] 0 yval 3341
1 yhat_lstm 3342
2 yhat_linreg 3341
3 yhat_gbm 3341
4 yhat_cnn 3341
5 yhat_phys 3341
然而:
[in] yhat_lstm['0'].size
[out] 3341
有谁知道为什么会发生这种情况?
解决方案
您yhat_lstm
的列表中的 和全局yhat_lstm
引用相同的数据框吗?当您进行数据处理时,您是否做过类似的事情yhat_lstm=...
?换句话说,您的数据处理可能并不都是in place
. 这样yhat_lstm
,您的列表中的 不再与yhat_lstm
全局范围中的相同。
您可以通过print(yhat_lstm is timeseries_list[1])
; 如果yhat_lstm
是突变,它会给你False
.
推荐阅读
- swiftui - 在 geometryReader 中设置 @State var
- azure - 断开与 AAD 的连接后看不到我的 Azure Devops 组织
- python - Jupyter notebook 没有显示任何文件?
- javascript - 使用 Javascript 寻找哈密顿路径。如何提高效率?
- database - 如何在 where 子句中将 if elseif else 与 'between' 一起使用。请提供合适的示例
- javascript - 通过脚本授予编辑权限(谷歌应用脚本)
- discord.py - Discord.py 如何获取所有审计日志的列表?
- c - 显示整数而不是排序字符串
- debugging - gdb 不显示函数调用的名称
- mysql - MySql 选择日期相差 30 分钟的行