使用Pandas对比两个Excel工作表结果与预期不符的原因
差异原因说明
你得到的运行结果和预期不符,是两个问题共同导致的:
- 默认表头识别吞掉了第一行数据:
pandas.read_excel()方法默认参数为header=0,会自动把读取范围的第一行当做DataFrame的列名,不会纳入数据行参与对比。
按你的原始代码逻辑读取后:- Sheet1的第一行值
a被识别为列名,实际存入df1的数据只有4行,行索引0~3对应的值依次是2、3、4、b - Sheet2的第一行值
1被识别为列名,实际存入df2的数据只有4行,行索引0~3对应的值依次是2、3、4、5
两个数组做等值判断时,前3行数值完全匹配,只有行索引3的位置值分别为b和5存在差异,因此实际输出3 0,和你的运行结果完全吻合。
- Sheet1的第一行值
- 行号计数规则混淆:pandas的行索引默认从0开始计数,和Excel界面从1开始标记行号的规则不同。就算你正确读入全部5行数据,最后一行的索引也是4,不存在索引为5的行,自然不可能返回
5 0的位置结果。
修正方案
读取Excel时手动指定header=None,明确告知pandas当前文件没有预设表头,所有行都作为数据读入即可:
import pandas as pds import numpy as np df1= pds.read_excel('/gdrive/MyDrive/file.xlsx',sheet_name=0, header=None) df2= pds.read_excel('/gdrive/MyDrive/file.xlsx',sheet_name=1, header=None) comparison_values = df1.values == df2.values rows,cols=np.where(comparison_values==False) for item in zip(rows,cols): print(item[0],item[1])
修正后代码运行输出为0 0和4 0,对应两个工作表第一行、第五行的差异,其中索引4就对应你预期里Excel行号为5的位置。
内容的提问来源于stack exchange,提问作者fransua
相关产品推荐
相关产品推荐

