Значения dataframe Pandas отказываются оцениваться как float с `.apply (eval)`. Зачем?

Используя 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 чтобы стать float, т. Е.

  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 

Почему это не работает? Как это может работать правильно?

 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