2015-06-08 50 views
3

如果我有一個DataframeTrue/False值僅是這樣的:Python Pandas布爾數據框其中Dataframe等於False - 返回0而不是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(如我所料),但爲什麼index13CCC等於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 
+2

這看起來像一個BU g對我來說,你可以在[GitHub](https://github.com/pydata/pandas/issues)上發佈這個問題,謝謝 – EdChum

回答

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:它不再是bools的數據框。

>>> df2 = df_mask.where(df_mask == False) 
>>> df2.dtypes 
AAA float64 
BBB  bool 
CCC float64 
dtype: object 

這即使你把它從getgo強制一個bool D型細胞發生:

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

+0

我還補充說try_cast和inplace關鍵字參數什麼都不做,暗示這是合法地猜測這種類型是浮動的。 –