看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
多文件合并在实际工作中还是比较常见的,汇总表往往费时费力,如果用代码帮我们去做就省力很多,而且还可以复用,就会节省大量时间。
最简单的方法是先单个把数据取出现来,然后进行合并。
df1 = pd.DataFrame(data1)
df2 = pd.read_excel('tmp.xlsx')
df3 = pd.read_csv('tmp.csv')
merged_df = pd.concat([df1, df2, df3])
注意,不要一个一个地去用 concat,这样性能会很差,可以先把所有表格加到列表里,一次性合并:
frames = [ process_your_file(f) for f in files ]
result = pd.concat(frames)
一个包含多个 Sheet 的 Excel 合并成一个 DataFrame:
dfm = pd.read_excel('team.xlsx', sheet_name=None)
pd.concat(dfm.values())
pd.concat(dfm) # 保留 Sheet 名作为一级索引
如果文件存在一个目录下,推荐方法:
import glob
# 取出目录下所有 xlsx 格式文件
files = glob.glob("data/*.xlsx")
cols = ['记录ID', '开始时间', '名称'] # 只取这些列
# 列表推导出对象
dflist = [pd.read_excel(i, usecols=cols) for i in files]
df = pd.concat(dflist) # 合并
其他方法:
# 多个文件
pd.concat(map(pd.read_csv, ['data/d1.csv',
'data/d2.csv',
'data/d3.csv']))
pd.concat(map(pd.read_excel, ['data/d1.xlsx',
'data/d2.xlsx',
'data/d3.xlsx']))
# 目录下所有文件
from os import listdir
filepaths = [f for f in listdir("./data") if f.endswith('.csv')]
df = pd.concat(map(pd.read_csv, filepaths))
# 方法 2
import glob
df = pd.concat(map(pd.read_csv, glob.glob('data/*.csv')))
df = pd.concat(map(pd.read_excel, glob.glob('data/*.xlsx')))
如果需要使用pd.merge()
追加列合并时,由于此方法只能合并两个 DataFrame,因此可以用 reduce 来操作完成:
from functools import reduce
df = reduce(lambda a, b: pd.merge(a, b, on=['记录ID']), dflist)
只要熟练使用其中一个方法就行。
更新时间:2021-12-06 08:11:34 标签:pandas 合并 文件