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

标签 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.csv:

a,b
1,2
1,2

2.csv:

b,c
2,3
2,3

3.csv:

c,d
3,4
3,4

Pandas

您可以使用 pandasload并将 CSV 文件转换为数据帧。之后你可以 concatenate他们到一个单一的数据框可以be saved回到 CSV 文件。

enter image description here

一个完整的例子:

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,

图片来源:https://pandas.pydata.org/pandas-docs/version/0.20/merging.html

关于python - 如何在不同标题的python中加入时间序列数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54525536/

相关文章:

Python odbc游标: keeping persistent state after executing a query

在for循环中具有三个值的Python dict

python - "exec"函数采用什么编码?

python - 具有系列输入的类别列的 fillna 无法按预期工作

python - 将分类变量的 Pandas DataFrame 转换为具有计数和比例的 MultiIndex

python - 如何将 for 循环推进 2 次迭代?

python - Pandas 检查多列的条件

python - 如何将pandas dataframe中字符串类型的一列拆分为int类型的几列

python-3.x - 使用python打开.mat(matlab数据)

python - 按绝对值对 pandas 系列进行排序