使用 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
我想使用 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