在 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 的列表。我现在如何将它们合并到“时间戳”列?我已经尝试 concate
和 merge
,但它总是将它们放在一个列中。
您正在寻找的是数据帧之间的外部连接。由于 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
参数来清理您的列标题。
晚上好,
所以我有大量的 .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 的列表。我现在如何将它们合并到“时间戳”列?我已经尝试 concate
和 merge
,但它总是将它们放在一个列中。
您正在寻找的是数据帧之间的外部连接。由于 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
参数来清理您的列标题。