pd.eval()不仅可以返回True或False值,还可以返回Nan或None吗?

时间:2020-07-06 15:55:46

标签: python pandas dataframe eval

我的熊猫数据框缺少值,例如:

  My_var1   My_var2   My_var3   My_var4
0     No         W6        No       Nan
1     No         W6        No       Nan  
2     No         W6        No       Yes
3     No         W6        No        No
4     No         W6        Yes       No

我还有一系列以str格式存储的数据过滤器,例如:

"(My_var4 == 'Yes')"

我将此过滤器与eval()结合使用以获取布尔序列:

my_data.eval(my_filter)

但是对于Nan值,eval函数返回False而不是Nan,但是我希望它返回Nan ...

如何将str过滤器应用于pd数据帧,并获取返回的True,False和Nan(或None)值?

1 个答案:

答案 0 :(得分:1)

eval的{​​{3}}集合非常有限,因此通常您不能执行更复杂的逻辑表达式。

要完全获得您描述的行为是不可能的。也就是说,您不会得到eval来返回带有True/False/NaN的对象系列。我认为最接近的是带有1/0/NaN的浮点列。这需要一些精神体操运动员通过其属性NaN来标识X != X,并且X> 1的np.arcsin(X)确实返回NaN

s = "(My_var4 == 'Yes') * arcsin((My_var4 != My_var4) + sin(1))"
df.eval(s)

0    NaN
1    NaN
2    1.0
3    0.0
4    0.0
Name: My_var4, dtype: float64