使用 Python 3.4,我有一个 Pandas 数据框
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
关于python - Pandas 数据帧值拒绝被评估为带有 `.apply(eval)` 的 float 。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38709791/