如何在Pandas DataFrame的文本中随机替换一次指定字符
Pandas 实现单文本内随机替换一个'b'为'6'
需求说明
现有包含索引和单列review的Pandas DataFrame X_test,需要将文本中的字符'b'替换为'6',但仅随机替换每个文本中的一个'b'(若存在多个'b')。原示例代码会替换指定行内所有的'b',无法满足需求:
X_test["modified_review"] = X_test["review"] X_test.loc[2, "modified_review"]= X_test.loc[2, "modified_review"].replace('b','6')
解决方案
批量处理所有行
编写自定义函数定位随机单个'b'进行替换,通过apply批量应用到列:
import pandas as pd import random def replace_single_b(text): # 找出文本中所有'b'的位置索引 b_indices = [idx for idx, char in enumerate(text) if char == 'b'] if b_indices: # 随机选一个位置替换 target_idx = random.choice(b_indices) text_list = list(text) text_list[target_idx] = '6' return ''.join(text_list) # 无'b'则返回原文本 return text # 生成处理后的列 X_test["modified_review"] = X_test["review"].apply(replace_single_b)
单独处理指定行
如果只需要处理特定行(比如原示例中的第2行),可以直接对该行调用函数:
target_row = 2 X_test.loc[target_row, "modified_review"] = replace_single_b(X_test.loc[target_row, "review"])
原理说明
- 函数先遍历文本,收集所有'b'的位置索引;
- 若存在'b',通过
random.choice随机选取一个索引进行替换; - 字符串不可直接修改,因此先转为列表修改后再转回字符串。
内容的提问来源于stack exchange,提问作者SLA
相关产品推荐
相关产品推荐

