首页 > 解决方案 > 熊猫数据框替换特定位置的字符,而不更改其他位置的相似字符

问题描述

数据框中有一列(‘A’)长度为 3 到 8。对于长度为 6 的列,如果 O 位于字符串的第 2、第 4 或第 6 个字符中,我需要将 O 替换为 0(零)。例如:

OOMOOO to O0M0O0
O4MOP8 to O4M0P8
H4M2SO to H4M2S0

以下代码仅适用于第 6 个字符:(长度为 6 时的最后一个字符)

df['A'] = df[(df['A'].str.len() == 6)]['A'].str.replace('O$', '0')

知道如何在第 2 和第 4 位置实现这一目标吗?

标签: pythonpandas

解决方案


您可以使用 apply 尝试这样的事情:

def replace_chars(x):
    return "".join(["0" if chr == "O" and ind%2 ==0 else chr for ind, chr in enumerate(x)])

m = df['A'].str.len() == 6 
df.loc[m, 'A'] = df.loc[m, 'A'].apply(replace_chars)

编辑:更改赋值语法以避免链接,感谢 jezrael


推荐阅读