【问题标题】:Merge several .csv into one csv in python在python中将几个.csv合并为一个csv
【发布时间】:2020-11-25 00:25:08
【问题描述】:

晚上好,

所以我有大量的 .csv,我要么想在用 pandas 读取它之前将其更改为一个巨大的 csv,要么直接创建一个包含所有 .csv 的 df。 .csvs 都有两列“时间戳”和“控股”。现在,如果它们彼此匹配,我想将它们合并到“时间戳”列上,并为每个“控股”列创建一个新列。到目前为止,我制作了这个:

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,但它总是将它们放在一个列中。

【问题讨论】:

  • 所有文件都有相同的列吗?你能发帖print(*dfs[:2], sep='\n\n')吗?
  • 是的,不幸的是它们有相同的列,具有相同的名称......输出看起来像这样; users_holding 时间戳 2018-05-02 04:54:46 158 2018-05-02 06:39:57 158 2018-05-03 00:36:38 158 2018-05-03 06:35:01 158 2018-05- 03 06:50:00 158 ...
  • 您可以编辑您的问题以包含 dfs,这将帮助您获得更好的答案

标签: python pandas csv merge concat


【解决方案1】:

您正在寻找的是数据框之间的外部连接。由于 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 参数来清理列标题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2017-11-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多