看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
将不同时间戳的数据同该时间戳一起,插入即将合并时间戳顺序的相应位置中,而非按行堆叠于数据的末尾。本例将实现按目录读取所有 Eexcel 文件,用 pd.concat
合并 Dataframe。
在一个文件目录 data_test/
下,有多个 excel 文件,文件名类似 df1.xlsx、df2.xlsx、dfx.xlsx 等(下载样例:下载 ),数据内容格式为:
'''
TM Z Q
0 1995-01-04 08:00 160.02 4140.0
1 1995-01-05 08:00 159.93 4000.0
2 1995-01-06 08:00 160.05 4180.0
3 1995-01-07 08:00 159.93 4040.0
4 1995-01-08 08:00 159.88 3990.0
... ... ... ...
2353 1998-04-03 08:00 158.52 2690.0
2354 1998-04-04 08:00 158.64 2800.0
2355 1998-04-05 08:00 158.72 2870.0
2356 1998-04-06 08:00 158.72 2910.0
2357 1998-04-07 08:00 158.58 2740.0
'''
具体需求有:
我们针对需求提供如下解决思路:
最终代码实现如下:
import pandas as pd
import glob
import re
# 取出目录下所有 xlsx 格式文件
files = glob.glob("data_test/*.xlsx")
# 提取文件名,用于列名的前缀
f = lambda x: re.findall(r'\/(\w+).xlsx', x)[0]+'_'
# 列表推导出对象
dflist = [pd.read_excel(i)
.set_index('TM')
.rename(lambda x: f(i) + x, axis=1) for i in files]
df = pd.concat(dflist, axis=1, join='outer') # 合并
df.sort_index().head(10)
'''
df1_Z df1_Q df2_Z df2_Q
TM
1995-01-04 08:00 160.02 4140.0 39.59 5020.0
1995-01-05 08:00 159.93 4000.0 39.67 5160.0
1995-01-06 08:00 160.05 4180.0 39.93 5600.0
1995-01-07 08:00 159.93 4040.0 40.00 5740.0
1995-01-08 08:00 159.88 3990.0 39.98 5700.0
1995-01-09 08:00 159.83 3930.0 40.04 5800.0
1995-01-10 08:00 159.78 3880.0 39.83 5440.0
1995-01-10 09:30 NaN NaN 39.93 5640.0
1995-01-10 14:18 159.82 3920.0 NaN NaN
1995-01-11 08:00 159.55 3640.0 39.84 5450.0
'''
用到的知识点:
(完)
更新时间:2024-08-18 15:40:14 标签:pandas 合并