Pandas列含特殊字符字符串替换报错如何提取目标值
报错根因
error: unterminated character set at position 0属于正则语法错误:[在正则规则中是字符集的起始标记,对以[开头的列内容执行正则替换时,如果没有转义该特殊字符、也没有匹配的]闭合字符集,正则解析器就会抛出该错误。
你的col 2列内容为列表包裹的单字典结构,分两种存储类型对应处理即可得到预期结果:
解决方案
场景1:col 2存储内容为字符串格式
如果列值是类结构的文本字符串(打印后显示为[{'?username': 'usr/AMY16548'}]格式的文本),可选两种稳妥处理方式:
- 方式1:关闭正则匹配做固定字符串替换,从根源避免正则语法错误
import pandas as pd # 构造示例复现数据 df = pd.DataFrame({ 'col 1': ['Amy', 'Jack', 'Sarah'], 'col 2': [ "[{'?username': 'usr/AMY16548'}]", "[{'?username': 'usr/JACK15822'}]", "[{'?username': 'usr/SARAH00001'}]" ] }) # 执行替换处理 df['col 2'] = (df['col 2'] .str.replace("[{'?username': '", '', regex=False) .str.replace("'}]", '', regex=False))
- 方式2:直接解析字符串为Python原生结构取值,抗格式波动能力更强
借助标准库ast将文本解析为实际的列表+字典对象,直接按键取值,避免字符串替换的匹配误差:
import ast df['col 2'] = df['col 2'].apply(lambda x: ast.literal_eval(x)[0]['?username'])
场景2:col 2存储内容为原生Python对象
如果列值已经是实际的列表、字典类型(数据读入时自动完成了结构解析),不需要做字符串替换,直接遍历取值即可:
df['col 2'] = df['col 2'].apply(lambda x: x[0]['?username'])
处理效果
执行对应逻辑后,输出结果完全匹配预期:
col 1 col 2 0 Amy usr/AMY16548 1 Jack usr/JACK15822 2 Sarah usr/SARAH00001
内容的提问来源于stack exchange,提问作者user14057357
相关产品推荐
相关产品推荐

