Python pd.eval()是否可以返回Nan或None,而不仅仅是True/False值?
我有一个缺少值的数据框,例如:Python pd.eval()是否可以返回Nan或None,而不仅仅是True/False值?,python,pandas,dataframe,eval,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
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
"(My_var4 == 'Yes')"
我还有一系列以str格式存储的数据过滤器,例如:
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
"(My_var4 == 'Yes')"
我将此过滤器与eval()一起使用以获得布尔级数:
my_data.eval(my_filter)
但是对于Nan值,eval函数返回False而不是Nan,但是我希望它返回Nan
如何将str筛选器应用于我的pd数据帧,并获得返回的True、False和Nan(或None)值?
eval
有一组非常有限的值,因此通常无法执行更复杂的逻辑表达式
要准确地了解你描述的行为是不可能的。也就是说,您将无法使用eval
返回带有True/False/NaN
的对象序列。我认为最接近的是带有1/0/NaN
的float列。这需要一些心理体操来通过其X!=X
为真,且X>1的np.arcin(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