我目前有大约500个CSV文件的时间序列数据。我正在使用以下代码加入他们:
from glob import glob
with open('master.csv', 'a') as singleFile:
for csv in glob('*data.csv'):
if csv == 'master.csv':
pass
else:
for line in open(csv, 'r'):
singleFile.write(line)
但是有一个问题,每个文件的标题都不相同,因为第一行列出了公司列表,但是随着时间的流逝,一些公司退休了,有些公司加入了市场,因此存在不一致之处当我向下滚动合并文件时。
为说明我的问题,我将举一个例子:
这是我的csv文件的前三个文件的格式。
我想要的输出如下:
当前,我通过手动在各列之间移动来达到所需的输出,合并文件时,python是否可以检测到新列并将其移至右侧?
非常感谢!
答案 0 :(得分:1)
1.csv
:
a,b
1,2
1,2
2.csv
:
b,c
2,3
2,3
3.csv
:
c,d
3,4
3,4
您可以使用pandas至load并将CSV文件转换为数据帧。之后,您可以concatenate将它们be saved到单个数据帧,可以返回到CSV文件。
https://pandas.pydata.org/pandas-docs/version/0.20/merging.html
完整示例:
from glob import glob
import pandas as pd
df = pd.concat([pd.read_csv(f, delimiter=',') for f in glob('*.csv') if not f.startswith('all.csv')], ignore_index=True, sort=False)
print(df)
# a b c d
# 0 1.0 2.0 NaN NaN
# 1 1.0 2.0 NaN NaN
# 2 NaN NaN 3.0 4.0
# 3 NaN NaN 3.0 4.0
# 4 NaN 2.0 3.0 NaN
# 5 NaN 2.0 3.0 NaN
df.to_csv('all.csv', index=False)
# a,b,c,d
# 1.0,2.0,,
# 1.0,2.0,,
# ,,3.0,4.0
# ,,3.0,4.0
# ,2.0,3.0,
# ,2.0,3.0,
图片来源:this