使用iteritems()时在字典中操作pandas数据帧

时间:2017-06-15 09:01:27

标签: python pandas dictionary dataframe

我创建了一个数据帧字典来存储我的数据。我需要为每个数据帧做一些事情,我试图使用iteritems()迭代字典。但不知怎的,我似乎无法对数据帧做任何事情。代码编译并且不会抛出任何错误,它似乎没有做任何事情。

这是我的代码的简化:

这只是一个数据帧的示例字典

dic={}
df1=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e'])
df2=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e'])
df3=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e'])
df4=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e'])
df5=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e'])

dic[1]=df1
dic[2]=df2
dic[3]=df3
dic[4]=df4
dic[5]=df5

这是我想对每个数据帧做的基本事情。

for key, item in dic.iteritems():
    item=item.reset_index()    
    item['Rank']=(item.index)+1

因此,在迭代之后,我希望每个数据帧都有一个带有旧索引的额外列,另一个列带有" Rank"像这样:

Expected

相反,数据框似乎不受操作的影响,看起来和以前一样:

Reality

我还尝试在迭代中使用临时数据帧,然后尝试将其写入" item"结果相同。我只是想知道我想做的事情是否可能,或者我不得不绕过它并使用不同的方法来实现我的目标。

2 个答案:

答案 0 :(得分:0)

我认为您只需要回拨DataFrame,如果希望python 2 and 3代码使用items(),则

for key, item in dic.items():
    item=item.reset_index()    
    item['Rank']=(item.index)+1
    dic[key] = item

print (dic[1])
   index         a         b         c         d         e  Rank
0      0 -1.085631  0.997345  0.282978 -1.506295 -0.578600     1
1      1  1.651437 -2.426679 -0.428913  1.265936 -0.866740     2
2      2 -0.678886 -0.094709  1.491390 -0.638902 -0.443982     3
3      3 -0.434351  2.205930  2.186786  1.004054  0.386186     4
4      4  0.737369  1.490732 -0.935834  1.175829 -1.253881     5
5      5 -0.637752  0.907105 -1.428681 -0.140069 -0.861755     6
6      6 -0.255619 -2.798589 -1.771533 -0.699877  0.927462     7
7      7 -0.173636  0.002846  0.688223 -0.879536  0.283627     8
8      8 -0.805367 -1.727669 -0.390900  0.573806  0.338589     9
9      9 -0.011830  2.392365  0.412912  0.978736  2.238143    10

答案 1 :(得分:-1)

将项目的数据帧分配回dic [key]

for key, item in dic.items():
    item=item.reset_index()    
    item['Rank']=(item.index)+1
    dic[key] = item