前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于pandas.eval使用的一些问题。

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

作者头像
forxtz
发布2020-10-10 17:10:30
9630
发布2020-10-10 17:10:30
举报
文章被收录于专栏:源懒由码源懒由码源懒由码

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档