【问题标题】:To calculate maths operation in a column using pandas使用 pandas 计算列中的数学运算
【发布时间】:2020-08-25 06:02:12
【问题描述】:

我想使用 python 在 CSV 文件的列中获取数学运算的最终值,请问是否可以获取如下值?

原始 CSV:

Type Total
A    2+2
B    (10/2)*5
C    5-2*3

预期输出:

Type Total
A    4
B    25
C    -1

我已经尝试过四处搜索,但我对此一无所知... 所有数据都在字符串中,我尝试转换为浮点数,但由于数学运算,无法完成。

【问题讨论】:

  • 您正在寻找eval 方法...但请确保您查找正确的应用程序,因为旧版本特别危险。
  • 嗨 Prune,感谢您推荐的方法 :) 我会检查这个功能

标签: python pandas math calculation operation


【解决方案1】:

pandas.evalSeries.apply 一起使用:

df['Total'] = df['Total'].apply(pd.eval)
print (df)
0    A    4.0
1    B   25.0
2    C   -1.0

不要使用:

df['Total'] = pd.eval(df['Total'])

因为如果超过 100 行则失败。

编辑:如果只需要为不缺失值工作:

mask = df['Total'].notna()
df.loc[mask, 'Total'] = df.loc[mask, 'Total'].apply(pd.eval)

EDIT1:如果可能,一些无法处理的值使用带有try-except的自定义函数:

print (df)
  Type     Total
0    A       2+2
1    B  (10/2)*5
2    C     5-2*3
3    D       NaN
4    E       aaa

def func(x):
    try:
        return pd.eval(x)
    except:
        return x

df['Total'] = df['Total'].apply(func)
print (df)
  Type Total
0    A     4
1    B    25
2    C    -1
3    D   NaN
4    E   aaa

【讨论】:

  • @Js_lfzr - 你认为缺少值吗?然后通过mask = df['Total'].notna() 测试非缺失值并仅针对该值应用解决方案,编辑答案。
  • 谢谢@jezrael,我发现了我的错误:)。非常感谢分享这些代码,我可以学到更多东西并简化我的代码:)
猜你喜欢
  • 2015-02-04
  • 2020-07-31
  • 2018-12-04
  • 2017-08-07
  • 2017-02-03
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
相关资源
最近更新 更多