替换pandas中整个数据帧中包含子字符串的整个字符串

2024-09-27 07:35:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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。我怎么能一次成功呢


Tags: 数据字符串testimportdataframepandasdfas
2条回答

注意,由于您在问题中提到了“substring”,我将示例更改为包含zzabc123zz,但您提供的示例没有显示该用例

可以将^{}与正则表达式一起使用

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和^{}列来执行str,最后包含^{}^{}

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

相关问题 更多 >

    热门问题