python excel读取引擎(pandas / read_excel)将boolean(true / false)转换为float(1.0 / 0.0),用于不完整的列

时间:2018-06-18 17:19:53

标签: python excel pandas

对于pandas.read_excel(),部分填充的excel列中的布尔值将转换为浮点数,如下面的比较所示:

如上所示,当excel列完全填充了布尔值时,引擎会按预期执行转换。对于engine = None和'xlrd',问题仍然存在并将电子表格保存为1)Excel Workbook(.xlsx); 2)Excel 97-2003(.xls); 3)5.0 / 95工作簿。

pd.__version__ = u'0.18.1'

xlrd.__VERSION__ = '1.1.0'

Excel Version 1805

明显的解决方法是在Excel中完全填充列,但这对我不起作用。

2 个答案:

答案 0 :(得分:0)

可能没有直接的解决方法。熊猫必须做出决定。由于该系列只能有一个<system.webServer> <validation validateIntegratedModeConfiguration="false" /> <handlers> <add name="Something.abc" verb="*" path="something.abc" type="ABC.MyHttpHandler, ABC" resourceType="Unspecified" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" /> ,因此在将布尔值转换为数字时,必须在dtype(只是一堆指针)或object之间进行选择。这可能是您的Pandas版本和/或Excel阅读器特有的。

您可以使用float进行后期处理:

pd.Series.map

注意结果系列将有df = pd.DataFrame({'col1': ['a', 'b', 'c'], 'col2': [1.0, 0.0, np.nan]}) df['col2'] = df['col2'].map({1.0: True, 0.0: False}) print(df) col1 col2 0 a True 1 b False 2 c NaN dtype。这是低效的,因为在这些列中保存的数据只是一系列指针(如Python列表)。

答案 1 :(得分:0)

将NaN填充到您想要的任何位置,然后转换为布尔值。

df = pd.DataFrame(dict(col1=['a', 'b', 'c'], col2=[1.0,0.0,pd.np.NaN]))
df['col2'] = df.col2.fillna(0.0).astype(bool)

df 
  col1   col2
0    a   True
1    b  False
2    c  False