gpt4 book ai didi

python - 循环更改 Pandas 数据框中列的顺序

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:40 26 4
gpt4 key购买 nike

我有许多 pandas.Dataframe 对象,想在 for 循环中对所有对象的列重新排序,但它不起作用。我拥有的是:

import numpy as np
import pandas as pd

df1 = pd.DataFrame(np.random.rand(5, 5))
df2 = pd.DataFrame(np.random.rand(5, 5))

dfs = [ df1, df2 ]

现在,更改列的名称有效:

for df in dfs:
df.columns = [ 'a', 'b', 'c', 'd', 'e' ]

df1.head()

打印(用字母代替数字的列):

          a         b         c         d         e
0 0.276383 0.655995 0.512101 0.793673 0.165763
1 0.841603 0.831268 0.776274 0.670846 0.847065
2 0.626632 0.448145 0.184613 0.763160 0.337947
3 0.502062 0.881765 0.154048 0.908834 0.669257
4 0.254717 0.538606 0.677790 0.088452 0.014447

但是,更改列的顺序并不以相同的方式起作用。以下循环:

for df in dfs:
df = df[ [ 'e', 'd', 'c', 'b', 'a' ] ]

保持数据帧不变。

如果我在 for 循环之外为每个数据帧执行此操作,它会起作用:

df1 = df1[ [ 'e', 'd', 'c', 'b', 'a' ] ]
df1.head()

打印以下内容:

          e         d         c         b         a
0 0.165763 0.793673 0.512101 0.655995 0.276383
1 0.847065 0.670846 0.776274 0.831268 0.841603
2 0.337947 0.763160 0.184613 0.448145 0.626632
3 0.669257 0.908834 0.154048 0.881765 0.502062
4 0.014447 0.088452 0.677790 0.538606 0.254717

为什么我不能遍历数据帧来更改列顺序?

如何遍历列表中的数据框以更改列顺序?


使用 python 3.5.3、pandas 0.23.3

最佳答案

我花了一段时间在上面,它实际上给了我一个很好的谜题。
它以这种方式工作,因为在您的第一个循环中您修改 现有对象,但在第二个循环中您实际上创建 对象并覆盖旧的;因此,列表 dfs 失去了对 df1df2 的引用。如果您希望代码以在第二个循环之后您希望看到应用到 df1df2 的更改的方式工作,您只能使用操作的方法在原始数据帧上,不需要覆盖。
我不相信我的方式是最佳方式,但这就是我的意思:

import numpy as np
import pandas as pd

df1 = pd.DataFrame(np.random.rand(5, 5))
df2 = pd.DataFrame(np.random.rand(5, 5))

dfs = [ df1, df2 ]

for df in dfs:
df.columns = [ 'a', 'b', 'c', 'd', 'e' ]

for df in dfs:
for c in ['e', 'd', 'c', 'b', 'a']:
df.insert(df.shape[1],c+'_new',df[c])
#df.drop(['e', 'd', 'c', 'b', 'a'], axis=1)
for c in [ 'a', 'b', 'c', 'd', 'e' ]:
del df[c]
df.columns = ['e', 'd', 'c', 'b', 'a']

然后调用 df1 打印:

           e           d           c           b           a
0 0.550885 0.879557 0.202626 0.218867 0.266057
1 0.344012 0.767083 0.139642 0.685141 0.559385
2 0.271689 0.247322 0.749676 0.903162 0.680389
3 0.643675 0.317681 0.217223 0.776192 0.665542
4 0.480441 0.981850 0.558303 0.780569 0.484447

关于python - 循环更改 Pandas 数据框中列的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56459810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com