从pandas中的列表中提取唯一的项目

时间:2018-05-17 09:36:40

标签: python string pandas series

如何从列表中提取值?例如,

df = pd.DataFrame([[0, 4, 'Abc', 456, '[45.55%]'],
                   [2, 5.2, 'abc', 5, '[34.54%]'],
                   [0.2, 6, 'xyz', 65, '[12.21%]'],
                   [3, 4.1, 'Xbc', 23, '[99.12%]']], columns=['start', 'end', 'name','body_mass', 'budget'])

我可以使用字符串替换功能,如下所示。但我正在寻找更好的解决方案。

df.budget.str.replace('[', '').str.replace(']', '').str.replace('%', '').astype(float)

0    45.55
1    34.54
2    12.21
3    99.12
Name: budget, dtype: float64

如果重要的话,列表中只有一个项目。

3 个答案:

答案 0 :(得分:1)

这是一种不同的方式,使用pd.Series.str.replace删除%,ast.literal_eval将字符串转换为列表,operator.itemgetter提取第一项。

from ast import literal_eval
from operator import itemgetter

df['budget'] = df['budget'].str.replace('%', '')\
                           .apply(literal_eval)\
                           .apply(itemgetter(0))

print(df['budget'])

0    45.55
1    34.54
2    12.21
3    99.12
Name: budget, dtype: float64

使用正则表达式的替代方法:

import re

pattern = '|'.join([re.escape(i) for i in ('%', '[', ']')])

df['budget'] = df['budget'].str.replace(pattern, '')\
                           .astype(float)

答案 1 :(得分:1)

使用正则表达式:

df.budget.str.extract('(\d*\.?\d+)').astype(float)

答案 2 :(得分:0)

df['budget']=df.budget.str.replace('[', '').str.replace(']', '').str.replace('%', '').astype(float)

这将替换数据集中的整个列