关于pandas.eval使用的一些问题。


https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.eval.html?highlight=eval#pandas.DataFrame.eval

pandas.eval在官方文档中提示到的有点是执行高效率,同时可以使用字符串表达式进行计算,那么对于一些数学校验来说,是十分方便的。

df = pd.DataFrame(dict(a=range(5), b=range(5, 10)))
df.loc[0,'a'] = np.nan

 

 

 

df.eval("""
    c = a + b
    d = a + b + c
    a = 1
    f = (c>5) or (d > 9)""", inplace=False)

 

 

 可以方便的得出校验。但是在使用中有以下问题:

1、NAN值问题,NAN值会无法计算。因此执行前,需要先替换掉NAN值.

df.fillna(0.0,inplace=True)  # 这个效果好点,df.isnull()如果遇到多类型数据会报错
#df[df.isnull()] = 0.0 df.eval(""" c = a + b d = a + b + c a = 1 f = (c>5) or (d > 9)""", inplace=False)

 

 

 2、如果计算的键值不存在,会报错。

# 会提示KeyError
df.eval('e + b')

因此,需要先对列重新进行修正再进行计算。

#进行去重
df = df.reindex(columns = list(set(list(df.columns) + ['e'])),fill_value = 0) df.eval(
'e + b')

 

 

 综上所述:

1、使用前,需要对数据缺失值进行预处理;

2、需要对字符串表达式进行解析,然后重新构建数据列值。所以,最后还需要对表达式进行解析,提取里面的键值。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM