更改DataFrame列顺序

使用pandas进行数据分析的时候,有时会由于各种需求添加了一些列。可是列的顺序并不能符合自己的期望。这个时候就需要对于列的顺序进行调整。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(3, 5))
df["mean"]=df.mean()
print(df)

显示的数据内容为:

          0         1         2         3         4      mean
0  0.320500  0.200182  0.910904  0.037071  0.596277  0.405417
1  0.212709  0.285527  0.329076  0.129344  0.126926  0.403962
2  0.683041  0.726176  0.030683  0.259034  0.883049  0.423555

其实想调整为:(将最后一列,放到第一列)

       mean         0         1         2         3         4
0  0.463490  0.360264  0.687535  0.541793  0.453763  0.262976
1  0.615846  0.795119  0.570023  0.293943  0.113567  0.697966
2  0.548002  0.235088  0.589980  0.808269  0.787805  0.683487

 

调整列顺序的代码为:

cols = df.columns.tolist()
# 更改列顺序方法1:
# cols = cols[-1:] + cols[:-1]
# 更改列顺序方法2: 这种可以指定位置进行插入,指定位置删除。其实就是list顺序调整方式
cols.insert(0, cols.pop(-1))
df = df[cols] #or df = df.reindex(columns=cols) #有的帖子中说也可以使用 df = df.ix[:, cols],其实这个方法已经废弃了
print(df)

如果使用df = df.ix[:, cols]更改列顺序,会收到报错信息。内容为:AttributeError: 'DataFrame' object has no attribute 'ix' 。

 

当然解决问题的方式会有多重多样,比如:

# 方法1:
df = df[['mean'] + [col for col in df.columns if col != 'mean']]
print(df)
#方法2:
col = df.pop("mean")
df.insert(0, col.name, col)
print(df)
#方法3:
df.set_index(df.columns[-1], inplace=True)
df.reset_index(inplace=True)
print(df)

 

posted @ 2021-12-01 21:08  kali080  阅读(3211)  评论(0编辑  收藏  举报