查找和替换Pandas数据框中的子字符串忽略大小写

时间:2018-08-15 18:23:07

标签: python regex string pandas dataframe

df.replace('Number', 'NewWord', regex=True)

如何用NewWord替换NumbernumberNUMBER

4 个答案:

答案 0 :(得分:3)

只需在case=False中使用str.replace

示例:

df = pd.DataFrame({'col':['this is a Number', 'and another NuMBer', 'number']})

>>> df
                  col
0    this is a Number
1  and another NuMBer
2              number

df['col'] = df['col'].str.replace('Number', 'NewWord', case=False)

>>> df
                   col
0    this is a NewWord
1  and another NewWord
2              NewWord

[编辑] :如果要查找多列,则可以选择具有object dtypes的所有列,然后将上述解决方案应用于它们。示例:

>>> df
                  col                col2  col3
0    this is a Number  numbernumbernumber     1
1  and another NuMBer                   x     2
2              number                   y     3

str_columns = df.select_dtypes('object').columns

df[str_columns] = (df[str_columns]
                   .apply(lambda x: x.str.replace('Number', 'NewWord', case=False)))

>>> df
                   col                   col2  col3
0    this is a NewWord  NewWordNewWordNewWord     1
1  and another NewWord                      x     2
2              NewWord                      y     3

答案 1 :(得分:3)

粗鲁。仅当整个字符串为'Number''NUMBER'时,此方法才有效。它不会替换较大字符串中的那些。当然,它仅限于这两个词。

df.replace(['Number', 'NUMBER'], 'NewWord')

更多蛮力乐队
如果还不够明显的话,这远远不如@coldspeed的答案

import re

df.applymap(lambda x: re.sub('number', 'NewWord', x, flags=re.IGNORECASE))

或者从@coldspeed的答案中得到提示

df.applymap(lambda x: re.sub('(?i)number', 'NewWord', x))

答案 2 :(得分:2)

与使用i flag使用标准正则表达式相同。

df = df.replace('(?i)Number', 'NewWord', regex=True)

当然,df.replace是有限制的,标志必须作为正则表达式字符串的一部分(而不是标志)传递。如果使用的是str.replace,则可以使用case=Falseflags=re.IGNORECASE

答案 3 :(得分:0)

如果您要转换的文本位于数据框的特定列中,则此解决方案将起作用:

    df['COL_n'] = df['COL_n'].str.lower() 
    df['COL_n'] = df['COL_n'].replace('number', 'NewWord', regex=True)