【问题标题】:Operating pandas dataframe inside a dictionary when using iteritems()使用 iteritems() 时在字典中操作 pandas 数据框
【发布时间】:2017-11-17 16:41:00
【问题描述】:

我创建了一个数据框字典来存储我的数据。我需要对尝试使用 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

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

【问题讨论】:

    标签: python pandas dictionary dataframe


    【解决方案1】:

    我认为你只需要分配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
    

    【讨论】:

    • 这个人太棒了。它就像一个魅力!我知道我只是错过了一些东西。
    • 既然我有你,那么 iteritems() 和 items() 有什么区别... iteritems() 是否已弃用?
    • 对我来说是个难题,但here 解释得更好。
    • 知道了!再次感谢!
    【解决方案2】:

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

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

    【讨论】:

    • 只是来晚了一点,但你也做对了!谢谢!
    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2014-12-06
    相关资源
    最近更新 更多