我有多个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' ] ]
这将不会改变数据框架。
如果我在循环之外为每个数据框架执行此操作,它可以正常工作:
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
列表,然后在调用df1
而不是dfs[0]
时查看循环中所做的更改,对吗?我非常好奇,为什么在第一个循环中进行修改(即更改列名)会以这种方式工作,但重新排列列却不行。 - pmarcoldf1
。 - Luis