【发布时间】: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, E和b.csv有列B, A, C, D,你会期待什么?那么顺序是什么?