首页 > 解决方案 > 不一致 - 从数据框中删除行仅部分有效

问题描述

我为使用熊猫的不一致而发疯。

我正在使用一组从 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

有谁知道为什么会发生这种情况?

标签: pythonpandasfor-loop

解决方案


yhat_lstm的列表中的 和全局yhat_lstm引用相同的数据框吗?当您进行数据处理时,您是否做过类似的事情yhat_lstm=...?换句话说,您的数据处理可能并不都是in place. 这样yhat_lstm,您的列表中的 不再与yhat_lstm全局范围中的相同。

您可以通过print(yhat_lstm is timeseries_list[1]); 如果yhat_lstm是突变,它会给你False.


推荐阅读