You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:27:23