在Pandas中将字符串类型列转换为数字列



上下文/问题

假设我有一个像下面这样的DataFrame,其中col2string

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更安全的替代方法。

相关内容

  • 没有找到相关文章

最新更新