【问题标题】:Python Pandas Boolean Dataframe Where Dataframe Equals False - Returns 0 instead of False?Python Pandas 布尔数据框,其中数据框等于 False - 返回 0 而不是 False?
【发布时间】:2015-08-22 10:37:35
【问题描述】:

如果我有一个 DataframeTrue/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 列中的13 等于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

【问题讨论】:

  • 这对我来说似乎是一个错误,你能把它作为一个问题发布到GitHub,谢谢

标签: python pandas boolean where dataframe


【解决方案1】:

不完全确定原因,但如果您正在寻找将其转换回布尔值的快速修复方法,您可以执行以下操作:

>>> 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:它不再是布尔数据帧。

>>> 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

【讨论】:

  • 我还要补充一点,try_cast 和 inplace 关键字参数什么都不做,这表明它合理地猜测类型是浮点数。
猜你喜欢
  • 2018-07-26
  • 1970-01-01
  • 2021-02-14
  • 2020-03-15
  • 2022-07-16
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
相关资源
最近更新 更多