上下文/问题
假设我有一个像下面这样的DataFrame,其中col2
是string
。
df = pd.DataFrame({ 'col1':[1,2,3,4,5], 'col2': ['7.7/10','8.2/10','5.8/10','9.2/10','8.9/10'] }
将col2
的字符串值更改为数字的最佳方法是什么
E。g7.7/10 = 0.77
尝试
我尝试使用pd.to_numeric()
方法,但是由于列值有/
,我认为它不起作用
df.col2 = pd.to_numeric(df.col2, downcast= 'float')
如果只涉及像示例中的除法,则可以:
import pandas as pd
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': ['7.7/10', '8.2/10', '5.8/10', '9.2/10', '8.9/10']})
def fun(x):
a, b = x.split("/")
return float(a) * (1 / float(b))
res = df["col2"].apply(fun)
print(res)
0 0.77
1 0.82
2 0.58
3 0.92
4 0.89
Name: col2, dtype: float64
作为一种选择,如果涉及更复杂的操作,您可以使用numexpr.evaluate
:
import numexpr
import pandas as pd
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': ['7.7/10', '8.2/10', '5.8/10', '9.2/10', '8.9/10']})
res = df["col2"].apply(numexpr.evaluate)
print(res)
0 0.77
1 0.82
2 0.58
3 0.92
4 0.89
Name: col2, dtype: float64
注意numexpr
是需要安装的第三方模块。最后,作为最后一个资源,如果您信任数据源,您可以使用eval
:
import pandas as pd
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': ['7.7/10', '8.2/10', '5.8/10', '9.2/10', '8.9/10']})
res = df["col2"].apply(eval)
print(res)
可以在这里找到一个比邪恶的eval更安全的替代方法。