【发布时间】:2018-12-21 22:26:55
【问题描述】:
df = pd.DataFrame({'b':[False,True,False,True,False]})
# changes all False values to NaN
df.loc[~df['b'], 'b'] = np.nan
print(df.to_dict())
# {'b': {0: nan, 1: 1.0, 2: nan, 3: 1.0, 4: nan}}
由于 loc 仅更改列中的特定值,我希望出现类似 {'b': {0: nan, 1: True, 2: nan, 3: True, 4: nan}} 的内容,但事实并非如此。为什么 .loc 将布尔值更改为浮点数,对此有什么好的解决方法?
【问题讨论】:
-
.loc没有改变类型;这是您包含np.NaN的值。DataFrame中的列必须都具有相同类型的数据。没有bool表示NaN,所以pandas 决定由于np.NaN、False=0和True=1都可以表示为float,因此整个列成为一个浮点列。