问题描述
pandas读取两个excel,将两个excel中的不同列进行汇总形成合计数,再对比合计数是否相等,以校验两个excel的数据是否一致。 在对比合计数是否相等时,出现pd.to_excel的时候,导出的excel中的合计数是相等的,但是使用下面方法对比合计数时,却显示“不一致”
summary_df_group['合计'] = summary_df_group[df_columns_staff_of_summary + df_columns_dept_of_summary].sum(axis=1).round(decimals=2)
detail_df_group['合计'] = detail_df_group[df_columns_staff_of_detail + df_columns_dept_of_detail].sum(axis=1).round(decimals=2)
df_merged = pd.merge(left=summary_df_group, right=detail_df_group, how='outer', on=['单位部门', '执行日期'],
suffixes=('_汇总', '_明细'))
df_merged.loc[df_merged['合计_汇总'] == df_merged['合计_明细'], '汇总明细是否一致'] = '一致'
原因
出现这个问题大概率是因为小数的精度问题,之前发现wps的excel的列所有值都是两位小数的情况下,合计数会出现.00000001,小数点后很多位。
解决方法
解决方法就是如上面的代码中.round(decimals=2)
,如果把合计数取消指定位数(即在上面代码中删除.round(decimals=2)
),就会出现上面比较不一致的问题。