我想使用python来获取CSV文件列中的数学运算的最终值,我是否可以获取如下所示的值?
原始CSV:
Type Total
A 2+2
B (10/2)*5
C 5-2*3
预期输出:
Type Total
A 4
B 25
C -1
我已经尝试过搜索,但是对此一无所知... 所有数据都是字符串形式,我试图转换为浮点数,但是由于数学运算,所以无法完成。
答案 0 :(得分:3)
将pandas.eval
与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