删除python pandas列中的特定字符串

时间:2018-10-18 19:49:54

标签: python python-3.x pandas nlp

我有一个带有列性别的数据框。它由性别预测组成。现在,“性别”列具有诸如mostly_male,mostly_female的值。我想删除大部分。所以我尝试了df['gender'] = df['gender'].map(lambda x: x.lstrip('mostly_'))

但是我得到了一个列,其中“ male”的值对应于“ ale”

3 个答案:

答案 0 :(得分:4)

您应该使用replace:

 df['gender'] = df['gender'].str.replace('mostly_', '')

这会将“ mostly_”的所有完全匹配项替换为空白的“”。如果在传递的字符串中找到前导字符,您的示例将从行中删除前导字符。因此lstrip找到了“ m”,并删除了“ mostly_”,但是由于“ male”中存在一个“ m”,因此也会将其删除。

答案 1 :(得分:4)

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

答案 2 :(得分:0)

您可以使用replace删除不需要的字符串。 lstrip将删除所有符合条件的字符。有关详细信息,lstrip docs 也可以使用正则表达式库替换子字符串

import re
df['gender'].map(lambda x: re.sub('^mostly_','',x))