如何用Python合并两个Excel工作表?现有代码无法正常运行
合并Excel工作表的问题排查与解决
问题场景
Sheet1包含列:Date、Code、time,Sheet2包含列:Date、time、temp、dew,目标是按日期时间匹配合并两个表,但以下代码无法正常运行:
原代码
df1['Datetime'] = pd.to_datetime(df1['Date'] + ' ' + df1['time']) df2['Datetime'] = pd.to_datetime(df2['Date'] + ' ' + df2['time']) merged_df = pd.merge(df1, df2, on='Date', how='left') merged_df = merged_df[merged_df['Datetime_y'] > merged_df['Datetime_x']]
问题排查
- 合并键错误:仅按
Date列合并会导致同一日期下的所有行两两匹配,产生大量冗余数据,后续用Datetime_y > Datetime_x筛选的逻辑完全偏离“匹配对应时间记录”的需求。 - 时间匹配逻辑混乱:没有针对日期时间做精准匹配,反而用大于号筛选,无法实现预期的合并效果。
- 潜在格式风险:如果
Date或time格式不规范,pd.to_datetime可能解析失败,直接导致后续操作报错。
修正方案
方案1:按合并后的Datetime列精准匹配
import pandas as pd # 读取工作表 df1 = pd.read_excel('your_file.xlsx', sheet_name='Sheet1') df2 = pd.read_excel('your_file.xlsx', sheet_name='Sheet2') # 生成Datetime列,加入格式错误处理 df1['Datetime'] = pd.to_datetime(df1['Date'] + ' ' + df1['time'], errors='coerce') df2['Datetime'] = pd.to_datetime(df2['Date'] + ' ' + df2['time'], errors='coerce') # 按Datetime左合并,保留df1所有记录并匹配对应时间的数据 merged_df = pd.merge(df1, df2, on='Datetime', how='left') # 清理冗余列并重命名(可选) merged_df = merged_df.drop(columns=['Date_y', 'time_y']) merged_df = merged_df.rename(columns={'Date_x': 'Date', 'time_x': 'time'})
方案2:直接按Date+time双列合并
如果不需要生成Datetime列,可直接用两列作为合并键:
import pandas as pd df1 = pd.read_excel('your_file.xlsx', sheet_name='Sheet1') df2 = pd.read_excel('your_file.xlsx', sheet_name='Sheet2') # 同时按Date和time匹配,确保每一行的日期时间精准对应 merged_df = pd.merge(df1, df2, on=['Date', 'time'], how='left')
关键说明
errors='coerce'参数会将解析失败的日期时间转为NaT,避免因格式问题导致程序崩溃。- 左合并(
how='left')会保留df1的所有记录,匹配不到的temp和dew字段会显示为NaN,符合常规合并需求。
内容的提问来源于stack exchange,提问作者user529674
相关产品推荐
相关产品推荐

