我有一个如下所示的DataFrame:
Product Score
AAA 1/4
ABB 1/2
ACC 1/1
我想要做的是使用pandas将此得分列转换为数字,“/”这里表示除法计算 所以输出应该是
Product Score
AAA 0.25
ABB 0.50
ACC 1.00
有什么想法吗?
答案 0 :(得分:2)
我可以使用apply而不是eval(特别是如果我不信任源代码)这样做:
import re
def extract_and_divide(s):
m = re.match(r"(\d+)/(\d+)", s)
return float(m.groups()[0]) / int(m.groups()[1])
In [11]: df.Score.apply(extract_and_divide)
Out[11]:
0 0.25
1 0.50
2 1.00
Name: Score, dtype: float64
注意:如果条目的格式不正确,您可能会收到错误。
答案 1 :(得分:0)
from __future__ import division
df['score'] = df['score'].apply(eval)
答案 2 :(得分:0)
假设整个列中的格式一致,您可以使用str.split
提取分子和分母,然后进行除法:
import pandas as pd
df = pd.DataFrame({'Product': ['AAA', 'ABB', 'ACC'],
'Score': ['1/4', '1/2', '1/1']})
s = df['Score'].str.split('/', expand=True).astype(int)
df['Score'] = s[0].div(s[1])
print df
输出:
Product Score
0 AAA 0.25
1 ABB 0.50
2 ACC 1.00