Python 数据帧替换特定位置的字符,而不更改其他位置上的类似字符

Python 数据帧替换特定位置的字符,而不更改其他位置上的类似字符,python,pandas,Python,Pandas,数据帧中有一列('a'),长度为3到8。 对于长度为6的字符串,如果O位于字符串的第2、第4或第6个字符中,我需要将O替换为0(零)。 例如: OOMOOO to O0M0O0 O4MOP8 to O4M0P8 H4M2SO to H4M2S0 以下代码仅适用于第6个字符:(长度为6时的最后一个字符) 你知道如何在第二和第四个职位上实现这一目标吗?你可以使用apply尝试类似的方法: def replace_chars(x): return "".join(["0" if chr ==

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

OOMOOO to O0M0O0
O4MOP8 to O4M0P8
H4M2SO to H4M2S0
以下代码仅适用于第6个字符:(长度为6时的最后一个字符)


你知道如何在第二和第四个职位上实现这一目标吗?

你可以使用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,您可以使用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

感谢Sven。对于偶数位置,我将ind%2==0更改为ind%2==1。它工作得很好,我的问题现在解决了。谢谢斯文。对于偶数位置,我将ind%2==0更改为ind%2==1。它工作得很好,我的问题现在解决了。