我的熊猫数据框缺少值,例如:
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)值?
答案 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