将商转换为数值

时间:2015-09-25 06:42:45

标签: python pandas

我有一个如下所示的DataFrame:

Product Score
AAA     1/4
ABB     1/2
ACC     1/1

我想要做的是使用pandas将此得分列转换为数字,“/”这里表示除法计算 所以输出应该是

Product Score
AAA     0.25
ABB     0.50
ACC     1.00

有什么想法吗?

3 个答案:

答案 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