python - Pandas 数据帧值拒绝被评估为带有 `.apply(eval)` 的 float 。为什么?

标签 python python-3.x pandas

使用 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/

相关文章:

python - 属性错误 : 'Bot' object has no attribute 'add_roles'

python - 我正在尝试理解 Python 中的二进制文件模式

python - Python 3.2 "with/as"是做什么的

python - dfply:变异字符串列:TypeError

python - 通过在两个现有列上使用 lambda 函数在 Panda 中创建一个新列

python - Pandas DataFrame 获取索引符合特定条件的行

Python,BeautifulSoup - 仅打印内容中包含 <img> 的链接

python2.7名称 '__path__'未定义

python - 删除 python django 模块中 content_id 和 ip_address 相同的重复项

python - 将 tf.keras.utils.image_dataset_from_directory 与标签列表一起使用