使用 pandas 计算列中的数学运算

To calculate maths operation in a column using pandas

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

原始 CSV:

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

预期输出:

Type Total
A    4
B    25
C    -1

我试过四处搜索,但我对它一无所知... 所有数据都是string,我试过转成float,但是由于数学运算,所以无法完成。

使用pandas.eval with Series.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