如何编写代码基于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)
代码说明
- 日期格式统一:通过
parse_dates=['Id']和dayfirst=True将字符串格式的日期(如3.11.2022)转换为pandas日期对象,避免字符串匹配的误差。 - 数据匹配填充:使用左连接(
how='left')以目标表的完整日期序列为基准,自动将源表对应日期的数据填充到目标表,缺失日期的字段自动填充NaN。 - 连续性验证:计算相邻日期的天数差,检查除第一行外的所有差值是否为1,快速定位不连续的日期位置。
- 结果保存:保留目标表原始列结构,将填充后的结果导出为新的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
相关产品推荐
相关产品推荐

