在 python 中将多个 .csv 合并为一个 csv

Merge several .csv into one csv in python

晚上好,

所以我有大量的 .csvs,我想在使用 pandas 读取之前在一个巨大的 csv 中进行更改,或者直接创建一个包含所有 .csvs 的 df。 .csvs 都有两列“timestamp”和“holdings”。现在,如果它们相互匹配,我想将它们合并到“timestamp”列中,并为每个“holdings”列创建一个新列。到目前为止,我制作了这个:

import os
import glob
import pandas as pd

os.chdir("C/USer....")
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

dfs = [pd.read_csv(f, index_col=[0], parse_dates=[0])
        for f in os.listdir(os.getcwd()) if f.endswith('csv')]

输出是一个带有 dfs 的列表。我现在如何将它们合并到“时间戳”列?我已经尝试 concatemerge,但它总是将它们放在一个列中。

您正在寻找的是数据帧之间的外部连接。由于 pandas merge 函数只在两个数据帧之间运行,我们需要遍历每个数据帧并单独合并它们。我们可以使用 functools 中的 reduce 迭代器在一行中干净地完成此操作:

import pandas as pd
from functools import reduce

df_merged = reduce(lambda  left,right: pd.merge(left,right,on=['timestamp'],
                                        how='outer'), dfs)

使用 merge 函数中的 suffixes 参数来清理您的列标题。