如何用Pandas对比两个XLSX的DataFrame并验证分类一致性
解决方案(基于Python Pandas)
步骤1:读取Excel并转换Siret为Siren格式
先把两个Excel文件读入DataFrame,然后将Df2的Siret转为字符串类型(避免数字格式丢失前导零),提取前9位得到和Df1一致的Siren:
import pandas as pd # 读取文件,注意指定Siret为字符串类型防止前导零丢失 df1 = pd.read_excel('你的文件1路径.xlsx') df2 = pd.read_excel('你的文件2路径.xlsx', dtype={'Siret': str}) # 从Siret提取前9位生成Siren列 df2['Siren'] = df2['Siret'].str[:9]
步骤2:自动对齐两个DataFrame
用merge方法基于Siren列合并,自动将相同Siren的行匹配对齐,无需手动排序:
# 合并DataFrame,how='inner'只保留双方都有的Siren;用'outer'可保留所有行 merged_df = pd.merge(df1, df2, on='Siren', how='inner')
步骤3:验证分类匹配并生成Verify标记
直接对比Categorie和Type列,生成布尔值的Verify列,匹配为True,不匹配为False。如果需要忽略大小写或空格,可以先做清洗:
# 基础匹配 merged_df['Verify'] = merged_df['Categorie'] == merged_df['Type'] # 可选:忽略大小写和首尾空格的匹配 # merged_df['Categorie_clean'] = merged_df['Categorie'].str.strip().str.lower() # merged_df['Type_clean'] = merged_df['Type'].str.strip().str.lower() # merged_df['Verify'] = merged_df['Categorie_clean'] == merged_df['Type_clean']
步骤4:处理不匹配项(可选)
如果需要单独查看或导出不匹配的记录,直接筛选即可:
# 筛选不匹配的行 mismatched_data = merged_df[merged_df['Verify'] == False] # 导出结果到新Excel merged_df.to_excel('完整匹配结果.xlsx', index=False) mismatched_data.to_excel('不匹配项汇总.xlsx', index=False)
关键提示
- 必须确保
Siren列在两个DataFrame中都是字符串类型,否则数字格式的差异(比如前导零丢失)会导致匹配失败。 - 如果你的Excel文件中Siret是数字格式,读取时一定要用
dtype={'Siret': str}参数,防止pandas自动转为整数丢失前导零。
内容的提问来源于stack exchange,提问作者Teddy
相关产品推荐
相关产品推荐

