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

时间:2022-07-26
本文章向大家介绍关于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、需要对字符串表达式进行解析,然后重新构建数据列值。所以,最后还需要对表达式进行解析,提取里面的键值。