保留列顺序 - Python Pandas 和列合并

12

我的谷歌搜索好像无法为我提供一个看起来应该是微不足道的程序。

在Python的Pandas中,我有两个数据集,我想将它们合并。使用.concat可以很好地解决这个问题。但问题是,.concat会重新排序我的列。从数据检索的角度来看,这是微不足道的。但从“我只想打开文件并快速查看最重要的列”的角度来看,这很烦人。

File1.csv
Name    Username    Alias1 
Tom     Tomfoolery   TJZ
Meryl   MsMeryl      Mer
Timmy   Midsize      Yoda

File2.csv
Name    Username   Alias 1   Alias 2
Bob     Firedbob   Fire      Gingy
Tom     Tomfoolery  TJZ      Awww

Result.csv
    Alias1 Alias2   Name    Username
0   TJZ    NaN      Tom     Tomfoolery
1   Mer    NaN      Meryl   MsMeryl
2   Yoda   NaN      Timmy   Midsize
0   Fire   Gingy    Bob     Firedbob
1   TJZ    Awww     Tom     Tomfoolery
结果很好,但是在我处理的数据文件中有1,000列。其中2-3个最重要的现在处于中间位置。在这个例子中,是否有一种方法可以强制“用户名”成为第一列,“姓名”成为第二列,同时保留每个下面的值,显然一直到底部。
另外顺带一提,当我保存文件时,它也会保存在侧边上的编号(0 1 2 0 1)。如果有办法阻止这种情况,那就太棒了。如果没有,那也没关系,因为删除它只需要一个快速修复。谢谢!
1个回答

11
假设已经将DataFrame拼接在一起,并且命名为df,您可以按以下方式重新排序列:
important = ['Username', 'Name']
reordered = important + [c for c in df.columns if c not in important]
df = df[reordered]
print df

输出:

     Username   Name Alias1 Alias2
0  Tomfoolery    Tom    TJZ    NaN
1     MsMeryl  Meryl    Mer    NaN
2     Midsize  Timmy   Yoda    NaN
0    Firedbob    Bob   Fire  Gingy
1  Tomfoolery    Tom    TJZ   Awww

数字列表[0, 1, 2, 0, 1]是数据框的索引。为了防止它们被写入输出文件,您可以在to_csv()中使用index=False选项:

df.to_csv('Result.csv', index=False, sep=' ')

将您的解决方案的前两行压缩成一行,例如: reorderd = [['username', 'name'] + col for col in summary.columns if col not in ['username', 'name']],这样做更符合Pythonic吗? - Lamma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接