Pandas数据帧值拒绝被评估为具有`.apply(eval)`的浮点数。为什么?

时间:2016-08-01 23:57:07

标签: python python-3.x pandas

使用Python 3.4,我有一个Pandas Dataframe

import pandas as pd
df = pd.read_csv('file.csv')
df.head()

    animal    fraction_decimal
0    cat1      '2/7'
1    cat2      '4/55'
2    cat3      '22/195'
3    cat4      '6/13'
....

我想评估列fraction_decimal中的值以成为浮点数,即

    animal     fraction_decimal
0    cat1      0.2857142857142857
1    cat2      0.07272727272727272
2    cat3      0.11282051282051282
3    cat4      0.46153846153846156
....

但是,使用.apply(eval)根本不起作用。

我试过

df['fraction_decimal'].apply(eval)

但是输出:

0           2/7
1           4/55
2           22/195
3           6/13
....
Name: fraction_decimal, dtype: object

为什么这不起作用?这怎么能正常工作?

1 个答案:

答案 0 :(得分:1)

eval("4/2")

2
eval("'4/2'")

'4/2'
eval(eval("'4/2/'"))

2

你的字符串中有引号字符。你需要剥离它们。

考虑:

s = pd.Series(["'1/2'", "'3/4'", "'4/5'", "'6+5'", "'11-7'", "'9*10'"])

然后:

s.str.replace(r'[\'\"]', '').apply(eval)

0     0.50
1     0.75
2     0.80
3    11.00
4     4.00
5    90.00
dtype: float64