对于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中完全填充列,但这对我不起作用。
答案 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