如何在不同标题的python中加入时间序列数据?

时间:2019-02-04 22:55:14

标签: python pandas numpy

我目前有大约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文件的前三个文件的格式。

current

我想要的输出如下:

desired

当前,我通过手动在各列之间移动来达到所需的输出,合并文件时,python是否可以检测到新列并将其移至右侧?

非常感谢!

1 个答案:

答案 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

熊猫

您可以使用pandasload并将CSV文件转换为数据帧。之后,您可以concatenate将它们be saved到单个数据帧,可以enter image description here返回到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