繁体   English   中英

替换包含大熊猫整个数据框中子字符串的整个字符串

[英]Replace whole string which contains substring in whole dataframe in pandas

我想替换包含特定子字符串的所有字符串。 例如,如果我有这个数据框:

import pandas as pd
df = pd.DataFrame({'col_1': ['abc', 'abc123', 'abc456'], 
               'col_2': ['abc123', '123', 'abc456']})

我想用字符串 'test' 替换包含'abc123'的字符串,如下所示:

df = pd.DataFrame({'col_1': ['abc', 'test', 'abc456'], 
               'col_2': ['test', '123', 'abc456']})

我试过了:

df.loc[df['col_1'].str.contains('abc123',na=False), 'col_1'] = 'test'

但它每次只能处理一个 col,我要处理数百个 col。 我怎么能一次性做到。

请注意,我将示例更改为包含zzabc123zz因为您在问题中提到了“子字符串”,但您提供的示例并未显示该用例。

您可以将df.replace与正则表达式一起使用。

import pandas as pd
import re

df = pd.DataFrame({'col_1': ['abc', 'abc123', 'abc456'],
                   'col_2': ['abc123', '123', 'zzabc123zz']})

df.replace(re.compile('.*abc123.*'), 'test', inplace=True)
print(df)

输出

    col_1  col_2
0     abc   test
1    test    123
2  abc456   test

使用str.contains另一个版本从 df 中selects对象 dtypes 并stacks列以执行 str 包含,最后unstackmask

m=df.select_dtypes('O')
df[m.columns]=m.mask(m.stack(dropna=False).str.contains('abc123',na=False).unstack(),'test')
print(df)

    col_1   col_2
0     abc    test
1    test     123
2  abc456  abc456

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM