【问题标题】:Preserving Column Order - Python Pandas and Column Concat保留列顺序 - Python Pandas 和列 Concat
【发布时间】:2015-12-08 15:12:02
【问题描述】:

所以我的 google-fu 似乎并没有对我公正,似乎应该是一个微不足道的程序。

在 Python 的 Pandas 中,我有 2 个数据集,我想合并它们。使用 .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)。如果也有办法防止这种情况发生,那就太好了。如果没有,这没什么大不了的,因为它可以快速修复。

谢谢!

【问题讨论】:

    标签: python pandas concatenation concat


    【解决方案1】:

    假设连接的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]是DataFrame的索引。为了防止它们被写入输出文件,您可以使用to_csv() 中的index=False 选项:

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

    【讨论】:

    • 将解决方案的前两行合并为一行是否或多或少是pythonic,例如:reorderd = [['username', 'name'] + col for col in summary.columns if col not in ['username', 'name']]
    猜你喜欢
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 2014-12-14
    相关资源
    最近更新 更多