【发布时间】:2018-04-28 13:01:09
【问题描述】:
说明
我在缺少数据的布尔系列上使用pandas.eval。
为此,我使用索引器标记非空值,并使用.loc 仅将.eval 应用于具有非缺失数据的行。
使用表达式~bool 或not(bool) 应用逻辑非运算符会返回-1 或-2。
我知道这是因为我的布尔系列由于缺少值而被转换为对象类型,但我想知道:
- 为什么是 -1 和 -2 输出?
- 在缺少数据的布尔系列上使用
.eval的正确方法是什么?
示例
这是一个使用 pandas 0.20.3 的可重现示例。
df = pd.DataFrame({'bool': [True, False, None]})
bool
0 True
1 False
2 None
indexer = ~pd.isnull(df['bool'])
0 True
1 True
2 False
Name: bool, dtype: bool
df.loc[indexer].eval('~bool')
0 -2
1 -1
Name: bool, dtype: object
【问题讨论】:
-
但我不断收到值错误
-
为什么不在评估之前强制转换为布尔值,即
df.loc[indexer].astype(bool).eval('~bool')。我也很好奇你为什么得到-2和-1 -
我无法转换,因为我可能有非布尔列(eval 适用于整个数据框,而不仅仅是一列)。例如我希望能够处理
df.eval('~bool & (num > 1)')其中 num 是一个数字列。
标签: python pandas boolean eval missing-data