使用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
为什么这不起作用?这怎么能正常工作?
答案 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