查找和替换Pandas数据框中的子串 忽略案例[英] Find and replace substrings in a Pandas dataframe ignore case

本文是小编为大家收集整理的关于查找和替换Pandas数据框中的子串 忽略案例的处理方法,想解了查找和替换Pandas数据框中的子串 忽略案例的问题怎么解决?查找和替换Pandas数据框中的子串 忽略案例问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

如何替换Number或number或NUMBER用newword

推荐答案

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

示例:

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

[edit] :如果您要寻找多个列,则可以选择使用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

其他推荐答案

与标准正则态度相同,使用 i标志.

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

授予,df.replace在某种意义上是限制了标志必须作为正则字符串的一部分(而不是标志)传递.如果是使用str.replace,则可以使用case=False或flags=re.IGNORECASE.

其他推荐答案

野蛮.这仅在整个字符串为'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))

本文地址:https://www.itbaoku.cn/post/1728142.html