首页 > 解决方案 > 删除 python pandas 列中的特定字符串

问题描述

我有一个列性别的数据框。它包括对性别的预测。现在,性别列具有诸如 most_male、most_female 之类的值。我主要想删除。所以我尝试了df['gender'] = df['gender'].map(lambda x: x.lstrip('mostly_'))

但我得到了一个对应于 'ale' 的列,其值为 'male'

标签: pythonpython-3.xpandasnlp

解决方案


pandas.DataFrame.replace

您可以将字典传递给此方法以指定要使用的列

df.replace({'gender': {'mostly_': ''}}, regex=True)

pandas.Series.str.replace

优点是不需要指定regex=True

df.gender.str.replace('mostly_', '')

pandas.Series.str

投票“最可能”打破。但是,如果您知道所有条目都以开头,"mostly_"那么为什么不呢?

df.gender.str[7:]

pandas.Series.map

我不喜欢其他选项,因为它们都涉及字符串操作。您可以更明确地使用字典映射并保持恒定时间查找

df.gender.map({'mostly_male': 'male', 'mostly_female': 'female'})

定时

设置

df = pd.DataFrame(dict(gender=[f"mostly_{g}" for g in ['male', 'female'] * 10000]))

测试

%timeit df.replace({'gender': {'mostly_': ''}}, regex=True)
%timeit df.gender.str.replace('mostly_', '')
%timeit df.gender.str[7:]
%timeit df.gender.map({'mostly_male': 'male', 'mostly_female': 'female'})

100 loops, best of 3: 12.8 ms per loop
100 loops, best of 3: 16.1 ms per loop
100 loops, best of 3: 5.42 ms per loop
1000 loops, best of 3: 1.8 ms per loop

推荐阅读