Python:合并具有不同标题的csv数据
我有一堆软件输出文件,我已经将它们处理成类似csv的文本文件。我可能已经很难做到这一点,因为我对python库不太熟悉 下一步是将所有这些数据收集到一个csv文件中。这些文件有不同的标题,或者排序不同 假设这是一个文件:Python:合并具有不同标题的csv数据,python,csv,append,Python,Csv,Append,我有一堆软件输出文件,我已经将它们处理成类似csv的文本文件。我可能已经很难做到这一点,因为我对python库不太熟悉 下一步是将所有这些数据收集到一个csv文件中。这些文件有不同的标题,或者排序不同 假设这是一个文件: A | B | C | D | id 0 2 3 2 "A" ... 这是文件B: B | A | Z | D | id 4 6 1 0 "B" ... 我希望append.csv文件如下所示: A | B | C | D | Z | id
A | B | C | D | id
0 2 3 2 "A"
...
这是文件B:
B | A | Z | D | id
4 6 1 0 "B"
...
我希望append.csv文件如下所示:
A | B | C | D | Z | id
0 2 3 2 "A"
6 4 0 1 "B"
...
我怎样才能优雅地做到这一点?感谢您的所有回答。您可以使用
pandas
将CSV文件读入数据帧,并使用concat
方法,然后将结果写入CSV:
将熊猫作为pd导入
df1=pd.read\u csv(“file1.csv”)
df2=pd.read\u csv(“file2.csv”)
df=pd.concat([df1,df2],轴=0,忽略索引=True)
df.to_csv(“file.csv”,index=False)
标准库中的模块提供了可用于执行此操作的工具。该类为csv文件中的每一行生成列名到值的映射;该类将把此类映射写入csv文件
DictWriter
必须提供列名列表,但不要求所有列名都出现在每一行映射中
import csv
list_of_files = ['1.csv', '2.csv']
# Collect the column names.
all_headers = set()
for file_ in list_of_files:
with open(file_, newline='') as f:
reader = csv.reader(f)
headers = next(reader)
all_headers.update(headers)
all_headers = sorted(all_headers)
# Generate the output file.
with open('append.csv', 'w', newline='') as outfile:
writer = csv.DictWriter(outfile, fieldnames=all_headers)
writer.writeheader()
for file_ in list_of_files:
with open(file_, newline='') as f:
reader = csv.DictReader(f)
writer.writerows(reader)
$cat append.csv
A、 B,C,D,Z,id
0,2,3,2,A
6,4,0,1,B
但是它应该基于列名追加pd。concat
隐式地基于列名追加,不是吗?