替换Pandas系列中元素的特定字符

2024-06-16 13:40:19 发布

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

我有这个熊猫系列的前

data = pd.Series(['A', 'B', 'C', 'AabX', 'BacX','', np.nan, 'CABA', 'dog', 'cat'])

现在,我想用PP替换元素的每个“X”和“dog”

因此,我的最终结果将是:

['A', 'B', 'C', 'AabPP', 'BacPP','', np.nan, 'CABA', 'PP', 'cat']

我这样做:

data.str.replace('X','PP')

我明白了:

['A', 'B', 'C', 'AabPP', 'BacPP','', np.nan, 'CABA', 'dog', 'cat']

但我能同时替换“狗”吗?还是我需要再次执行相同的过程


Tags: 元素datanpnanppcatseriespd
1条回答
网友
1楼 · 发布于 2024-06-16 13:40:19

如果需要替换子字符串X和没有子字符串的dog,请使用|替换正则表达式or,并添加^作为字符串开头,添加$作为字符串结尾:

df = data.str.replace('X|^dog$','PP', regex=True)
#alternative 
df = data.replace('X|^dog$','PP', regex=True)

如果需要替换为子字符串Xdog,请使用:

df = data.str.replace('X|dog','PP', regex=True)
#alternative 
df = data.replace('X|dog','PP', regex=True)

在本示例中可以更好地看到差异:

data = pd.Series(['A', 'BacX', 'dog', 'catdog', 'X'])

df = data.str.replace('X|^dog$','PP', regex=True)
print (df)
0         A
1     BacPP
2        PP
3    catdog <- dog is substring, so not replaced
4        PP
dtype: object

df = data.str.replace('X|dog','PP', regex=True)
print (df)
0        A
1    BacPP
2       PP
3    catPP <- dog is substring, so replaced
4       PP
dtype: object

编辑:感谢@SeaBean的另一个例子-如果dog没有子字符串,并且每个字符串中可以有多个单词,请添加单词边界\b\b

data.replace(r'X|\bdog\b','PP', regex=True)

相关问题 更多 >