如果我的Dataframe
True
/ False
值只有这样:
df_mask = pd.DataFrame({'AAA': [True] * 4,
'BBB': [False]*4,
'CCC': [True, False, True, False]}); print(df_mask)
AAA BBB CCC
0 True False True
1 True False False
2 True False True
3 True False False
然后尝试打印dataframe
中的值等同于False
的位置,如下所示:
print(df_mask[df_mask == False])
print(df_mask.where(df_mask == False))
我的问题是关于专栏CCC
。列BBB
显示False
(正如我所料),但为什么列index
中的1
3
和CCC
等于0
而不是False
?
AAA BBB CCC
0 NaN False NaN
1 NaN False 0
2 NaN False NaN
3 NaN False 0
AAA BBB CCC
0 NaN False NaN
1 NaN False 0
2 NaN False NaN
3 NaN False 0
为什么不返回看起来像这样的dataframe
?
AAA BBB CCC
0 NaN False NaN
1 NaN False False
2 NaN False NaN
3 NaN False False
答案 0 :(得分:1)
不完全确定原因,但如果您正在寻找快速解决方案将其转换为bool,您可以执行以下操作:
>>> df_bool = df_mask.where(df_mask == False).astype(bool)
>>> df_bool
AAA BBB CCC
0 True False True
1 True False False
2 True False True
3 True False False
这是因为返回的数据帧有不同的dtype:它不再是bools的数据帧。
>>> df2 = df_mask.where(df_mask == False)
>>> df2.dtypes
AAA float64
BBB bool
CCC float64
dtype: object
如果你从getgo强制它到bool dtype,这甚至会发生:
>>> df_mask = pd.DataFrame({'AAA': [True] * 4,
... 'BBB': [False]*4,
... 'CCC': [True, False, True, False]}, dtype=bool); print(df_mask)
AAA BBB CCC
0 True False True
1 True False False
2 True False True
3 True False False
>>> df2 = df_mask.where(df_mask == False)
>>> df2
AAA BBB CCC
0 NaN False NaN
1 NaN False 0
2 NaN False NaN
3 NaN False 0
如果您明确担心内存,您也可以只返回一个引用,但除非您明确忽略旧引用(在这种情况下它应该无关紧要),所以要小心:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.astype.html http://docs.scipy.org/doc/numpy/reference/generated/numpy.dtype.html