使用熊猫计算列中的数学运算

问题描述

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

原始CSV:

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

预期输出

Type Total
A    4
B    25
C    -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