数据帧值拒绝作为带“.apply(eval)”的浮点值进行求值。为什么?

2024-05-06 09:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python3.4,我有一个熊猫数据帧

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

为什么这样不行?如何才能正常工作?你知道吗


Tags: csv数据importpandasdfevalpddecimal
1条回答
网友
1楼 · 发布于 2024-05-06 09:22:47
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

相关问题 更多 >