我正在循环内处理一个数据框。在每次迭代中,都会对数据框变量执行操作。在每次迭代结束时,我都需要将此数据帧存储到字典中,并具有与迭代索引相关的索引。
例如:
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
字典中的值也正在更新。
解决此问题的方法是什么?我的实际数据帧更大,并且还有更多的操作需要在循环内执行。
答案 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()