如何从列表中提取值?例如,
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
如果重要的话,列表中只有一个项目。
答案 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)
这将替换数据集中的整个列