python - 在python中将几个.csv合并为一个csv
问题描述
晚上好,
所以我有大量的 .csvs,我要么想在用 pandas 读取它之前将其更改为一个巨大的 csv,要么直接创建一个包含所有 .csvs 的 df。.csvs 都有两列“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
但它总是将它们放在一个列中。
解决方案
您正在寻找的是数据框之间的外连接。由于 pandasmerge
函数只在两个数据帧之间运行,我们需要遍历每个数据帧并单独合并它们。我们可以使用reduce
迭代器 fromfunctools
在一行中干净地完成此操作:
import pandas as pd
from functools import reduce
df_merged = reduce(lambda left,right: pd.merge(left,right,on=['timestamp'],
how='outer'), dfs)
使用suffixes
函数中的参数merge
来清理列标题。
推荐阅读
- oracle - 将分隔符数据转换为行和列
- javascript - 如何调用使 Angular 服务同步?
- nav - 如何使用本地 bootstrap.min.css(4.0 版)与 nav nav-tabs 类一起使用?
- php - 关联运动数据库中的表。赛程表 - 主队和客队
- c++11 - 为什么编译器将不同大小的 std::array 视为不同类型?
- revit - 在 xBim 中导入 3D 成像数据
- python - TypeError:使用 sop.brute 时,“int”类型的对象没有 len()
- r - geom_histogram 根据理论不提供直方图
- sql-server - 不同的值不起作用
- html - 如何使用 express-validator 验证字符长度是否等于 5?