在循环中修改数据帧并将其存储在字典中

时间:2019-04-08 16:29:06

标签: python dataframe dictionary

我正在循环内处理一个数据框。在每次迭代中,都会对数据框变量执行操作。在每次迭代结束时,我都需要将此数据帧存储到字典中,并具有与迭代索引相关的索引。

例如:

df = pd.DataFrame(index=range(20))
dict = {}
for k in range(5):
    df['iter'] = k
    dict[k] = df

我的“ dict”预期结果将是一个包含5个数据帧的字典。对于键值“ 1”,我应该有一个数据框“ df”,其中列“ iter”的所有值都为1。类似地,对于键值“ 2”,我应该有一个具有所有值2的“ df”。

但是,我发现所有键值都在其中存储了相同的数据帧。它们在数据框中的值均为4。

我尝试逐步运行操作,而不是循环运行。我发现的是,最初存储了正确的数据帧。但是在下一个迭代步骤中,当执行

df['iter'] = k

字典中的值也正在更新。

解决此问题的方法是什么?我的实际数据帧更大,并且还有更多的操作需要在循环内执行。

2 个答案:

答案 0 :(得分:2)

每个进入dict(可怕的名称,BTW,因为它已经是类型名称)的条目都必须是df副本

答案 1 :(得分:1)

您需要复制数据框。 (dict是一个可怕的名称,不要将关键字用作变量名。如果需要使用它们,请在其后加上下划线。)

df = pd.DataFrame(index=range(20))
dict_ = {}
for k in range(5):
    df['iter'] = k
    dict_[k] = df.copy()