Pandas.read_excel 有时会错误地将布尔值读取为 1/0

Col*_*lin 6 python excel pandas

我需要将一个非常大的 Excel 文件读入 DataFrame。该文件包含字符串、整数、浮点数和布尔数据,以及缺失数据和完全空行。可能还值得注意的是,某些单元格值源自单元格公式和/或 VBA - 尽管理论上这不应该影响任何事情。

正如标题所说,pandas 有时将布尔值读取为 float 或 int 1 和 0,而不是 True 和 False。它似乎与空行的数量和其他数据的类型有关。为简单起见,我只是链接了一个复制问题的 2 张 Excel 文件。 Boolean_1.xlsx

这是代码:

import pandas as pd
df1 = pd.read_excel('Boolean_1.xlsx','Sheet1')
df2 = pd.read_excel('Boolean_1.xlsx','Sheet2')
print(df1, '\n' *2, df2)
Run Code Online (Sandbox Code Playgroud)

这是印刷品。主要注意行 ZBA,它在两个工作表中具有相同的值,但在 DataFrames 中具有不同的值:

  Name stuff  Unnamed: 1 Unnamed: 2 Unnamed: 3
0         AFD          a        dsf        ads
1         DFA          1          2          3
2         DFD      123.3       41.1       13.7
3        IIOP        why        why        why
4         NaN        NaN        NaN        NaN
5         ZBA      False      False       True 

   Name adslfa  Unnamed: 1  Unnamed: 2  Unnamed: 3
0        asdf         6.0         3.0         6.0
1         NaN         NaN         NaN         NaN
2         NaN         NaN         NaN         NaN
3         NaN         NaN         NaN         NaN
4         NaN         NaN         NaN         NaN
5         ZBA         0.0         0.0         1.0
Run Code Online (Sandbox Code Playgroud)

我还能够在我实际处理的大文件中获得整数 1 和 0 的输出(是的),但无法轻松复制它。

什么可能导致这种不一致,有没有办法强制熊猫读取布尔值,因为它们应该被读取?

小智 1

Read_excel 将根据具有值的列中的第一行确定每列的 dtype。如果该列的第一行为空,Read_excel 将继续下一行,直到找到值。

在 Sheet1 中,B、C 和 D 列中的值的第一行包含字符串。因此,所有后续行都将被视为这些列的字符串。在这种情况下,FALSE = False

在 Sheet2 中,B、C 和 D 列中的值的第一行包含整数。因此,所有后续行将被视为这些列的整数。在本例中,FALSE = 0。