【发布时间】:2019-01-10 17:15:06
【问题描述】:
我需要将一个非常大的 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)
这是印刷品。主要注意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
我还能够在我实际处理的大文件中获得整数 1 和 0 的输出(耶),但无法轻松复制它。
什么可能导致这种不一致,有没有办法强制熊猫读取布尔值,因为它们应该被读取?
【问题讨论】:
-
你知道哪些列应该是布尔值吗?您可以使用
dtype关键字指定加载列的数据类型 -
布尔列是否包含缺失或空白单元格?
-
我知道哪些行是布尔值。从理论上讲,我可以反转行和列,但在加载 DataFrame 之前我不知道该怎么做(此时数据是错误的)。不幸的是,由于我正在做的项目的性质,它需要能够处理空单元格、行和列(尽管我不明白为什么这会影响任何事情)
-
你也许可以通过transposing the data来躲避这个问题