【问题标题】:how to concatenate two csv files and keep the original order of columns in python?如何连接两个csv文件并保持python中列的原始顺序?
【发布时间】:2016-08-12 20:45:15
【问题描述】:

其实这个问题有很多部分。通过查看其他堆栈溢出问题的答案,我已经解决了一些问题。但是,还有一个小问题没有解决。输出的 csv 文件倾向于按字母顺序或其他顺序排列,这不是我想要的。

例如,我将垂直连接两个 csv 文件。这两个 csv 如下所示。

    a.csv
    B, A, C, E
    1, 1, 1, 1

    b.csv
    B, A, D, C
    2, 2, 2, 2

我想要得到的结果是

    c.csv
    B, A, D, C, E
    1, 1,  , 1, 1
    2, 2, 2, 2,   

首先,我将它们读入 pandas 数据帧。

    a = pd.read_csv("a.csv")
    b = pd.read_csv("b.csv")

然后将它们连接起来并通过

写入 csv
    c = pd.concat([a, b], join='outer')
    c.to_csv("c.csv", index=False)

输出的 csv 看起来像

    c.csv
    A, C, D, B, E
    1, 1,  , 1, 1
    2, 2, 2,  , 2 

有什么办法可以解决这个问题吗?我曾经想过类似答案Preserving column order in Python Pandas DataFrame的代码

    df.to_csv("dfTest.txt","\t",header=True,cols=["b","a","c"], engine='python')

但是,我的 csv 文件中有数百列,我无法手动记下列名的顺序。并且对于每组文件,列名是不同的。我试过了

    set(a.columns.values).union(list(b.columns.values))

也不行,因为set会打乱列表。

【问题讨论】:

  • 您需要为此使用 pandas 吗?
  • 您可以从第一个文件中读取列名,将其转换为字符串列表并将其放入.to_csv 参数cols 中。
  • 是的。我用的是pandas,因为我需要自动匹配两个文件的列名。
  • @meetaig 但是,第一个文件中的列并不是我输出所需的所有列。
  • 如果a.csv 有列B, A, C, Eb.csv 有列B, A, C, D,你会期待什么?那么顺序是什么?

标签: python csv pandas


【解决方案1】:

建立一个输出订单,然后您可以将其提供给c.to_csv(...),例如:

from collections import OrderedDict
out_order = OrderedDict.fromkeys(a.columns)
out_order.update(OrderedDict.fromkeys(b.columns))
out_order = list(out_order)
# ['B', 'A', 'C', 'E', 'D']

c.to_csv("c.csv", index=False, columns=out_order)

【讨论】:

  • 谢谢。这几乎就是我想要的。无论如何要制作最终的 out_order ['B', 'A', 'D', 'C', 'E'],而不是简单地将 b 中的额外列放在 c.csv 的末尾?
【解决方案2】:

你几乎用 a.columns 就可以了

col_names = a.columns.tolist() # list of column names
sorted_cols = sorted(col_names)

df.to_csv("dfTest.txt","\t",header=True,cols=sorted_cols, engine='python')

一行:

df.to_csv("dfTest.txt","\t",
          header=True,
          cols=sorted(a.columns.tolist()),
          engine='python')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2013-07-26
    相关资源
    最近更新 更多