You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写代码基于ID逐行对比并填充两个Excel文件

解决方案:基于日期匹配填充Excel数据并验证序列连续性

前置依赖

先安装必要的Python库:

pip install pandas openpyxl

(openpyxl用于读写.xlsx格式文件,若处理.csv可省略)

完整代码实现

import pandas as pd

# 读取源数据和目标模板文件
# 若为CSV文件,替换为pd.read_csv,其余参数不变
df_source = pd.read_excel('source_file.xlsx', parse_dates=['Id'], dayfirst=True)
df_target = pd.read_excel('target_file.xlsx', parse_dates=['Id'], dayfirst=True)

# 按日期Id匹配数据,缺失自动填充NaN
df_filled = df_target.merge(df_source, on='Id', how='left', suffixes=('', '_src'))
# 保留目标表原始列结构,替换为空数据列
for col in df_target.columns[1:]:
    df_filled[col] = df_filled[f'{col}_src']
df_filled = df_filled[df_target.columns]

# 验证日期序列连续性
df_filled['day_gap'] = df_filled['Id'].diff().dt.days
# 排除第一行(无前置日期),检查其余行间隔是否为1天
is_continuous = all(df_filled['day_gap'].iloc[1:] == 1)

if is_continuous:
    print("✅ 目标文件日期序列连续")
else:
    # 定位不连续的日期位置
    discontinuous_pos = df_filled[df_filled['day_gap'] != 1].index[1:]
    print(f"❌ 日期序列不连续,异常位置索引:{discontinuous_pos.tolist()}")

# 保存填充后的结果
df_filled.to_excel('filled_result.xlsx', index=False)

代码说明

  1. 日期格式统一:通过parse_dates=['Id']和dayfirst=True将字符串格式的日期(如3.11.2022)转换为pandas日期对象,避免字符串匹配的误差。
  2. 数据匹配填充:使用左连接(how='left')以目标表的完整日期序列为基准,自动将源表对应日期的数据填充到目标表,缺失日期的字段自动填充NaN。
  3. 连续性验证:计算相邻日期的天数差,检查除第一行外的所有差值是否为1,快速定位不连续的日期位置。
  4. 结果保存:保留目标表原始列结构,将填充后的结果导出为新的Excel文件,避免修改原始文件。

适配调整

  • 若源/目标文件是CSV格式,将pd.read_excel替换为pd.read_csv即可。
  • 若日期格式非dd.mm.yyyy,可指定解析格式:
    date_parser = lambda x: pd.to_datetime(x, format='%d.%m.%Y')
    df_source = pd.read_excel('source_file.xlsx', parse_dates=['Id'], date_parser=date_parser)
    

内容的提问来源于stack exchange,提问作者Sandra_Ver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:10:14