熊猫-如果不是数字,则替换列中的子字符串

时间:2020-07-02 13:29:49

标签: python pandas dataframe substring

我有一个要删除的后缀列表,例如suffixes = ['inc','co','ltd']。 我想从Pandas数据框中的列中删除这些,而我一直在这样做: df['name'] = df['name'].str.replace('|'.join(suffixes), '')

这可行,但是如果剩下的只是数字,我不想删除足够的内容。例如,如果名称为123 inc,则我不想删除'inc'。有没有办法在代码中添加此条件?

2 个答案:

答案 0 :(得分:2)

使用正则表达式-> negative lookbehind

例如:

suffixes = ['inc','co','ltd']

df = pd.DataFrame({"Col": ["Abc inc", "123 inc", "Abc co", "123 co"]})
df['Col_2'] = df['Col'].str.replace(r"(?<!\d) \b(" + '|'.join(suffixes) + r")\b", '', regex=True)
print(df)

输出:

       Col    Col_2
0  Abc inc      Abc
1  123 inc  123 inc
2   Abc co      Abc
3   123 co   123 co

答案 1 :(得分:1)

尝试将^[^0-9]+添加到后缀。它是一个REGEX,字面意思是“至少一个以前不是数字字符”。代码如下:

non_numeric_regex = r"^[^0-9]+"
suffixes = ['inc','co','ltd']
regex_w_suffixes = [non_numeric_regex + suf for suf in suffixes]
df['name'] = df['name'].str.replace('|'.join(regex_w_suffixes ), '')