如何使用Pandas匹配两个日期格式不一致的Excel文件
实现同日期数据匹配对齐的代码修改方案
核心修改逻辑
- 处理第一个Excel的带时分的时间列:转为pandas datetime格式后去除时分部分,格式化为和第二个Excel一致的8位数字日期
- 处理第二个Excel的纯数字日期列:确保格式和第一个文件处理后的日期格式统一
- 以统一格式的日期列为关联键,合并两个数据表完成同日期数据对齐
完整修改后代码
import os from numpy import empty, percentile import pandas as pd from pandas.core.frame import DataFrame from tkinter import Tk # from tkinter import Tk for Python 3.x from tkinter.filedialog import askopenfilename import logging import sys import pathlib from datetime import date, datetime Tk().withdraw() # 选择文件路径 filepathname1 = askopenfilename() filepathname2 = askopenfilename() print("你选择合并的文件为:", filepathname1, "和", filepathname2) # 读取两个Excel文件 df1 = pd.read_excel(filepathname1, 'CWA107 Event', na_values=['NA'], usecols="A, B, F") df2 = pd.read_excel(filepathname2) df1.dropna(inplace=True) df2.dropna(inplace=True) # 过滤第一个Excel的所需数据 df1filt = df1[(df1['Händelseinfo'] == "Bränslenivåökning vid stillastående")] print(df1filt) print("加油次数:", len(df1filt)) # ------------------- 新增修改部分开始 ------------------- # 请替换下方两个引号内的内容为你两个Excel中实际存储时间的列名 df1_time_col = "替换为df1的时间列名" df2_time_col = "替换为df2的时间列名" # 处理df1的时间列:转datetime后去除时分,转为8位整数日期 df1filt['统一匹配日期'] = pd.to_datetime(df1filt[df1_time_col]).dt.strftime('%Y%m%d').astype(int) # 处理df2的时间列:确保为8位整数格式,若本身已是整数可省略astype(int)步骤 df2['统一匹配日期'] = df2[df2_time_col].astype(int) # 按统一日期列合并两个表,how参数可根据需求调整 # inner:仅保留两边都有的日期;left:保留df1所有日期;right:保留df2所有日期;outer:保留两边所有日期 merged_result = pd.merge(df1filt, df2, on='统一匹配日期', how='inner') # 输出结果并保存为Excel print("匹配对齐后的数据:") print(merged_result) merged_result.to_excel('同日期匹配结果.xlsx', index=False) # ------------------- 新增修改部分结束 ------------------- input()
注意事项
- 若第二个Excel的日期列本身是字符串格式的8位日期,可将两边处理后的格式都改为字符串,删掉
.astype(int)即可,只要两边格式一致就能正常匹配 - 若不需要保留原始的两个时间列,可在合并后用
drop方法删除多余列
内容的提问来源于stack exchange,提问作者Leopold Wahlbeck
相关产品推荐
相关产品推荐

