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

pandas替换数据集\N值为math.nan触发re.error报错原因咨询

数据集样例

数据集字段结构及样例数据如下:

tconstorderingnconstcategoryjobCharacters
tt006904910.0nm0613657editor\N\N
tt00690491.0nm0001379actor\N
问题描述

已通过pandas加载上述CSV格式数据集,需要将数据集中所有值为\N的条目替换为math.nan,初始实现代码如下:

import math
import pandas as pd

cast_data = pd.read_csv("cast.csv")
cast_data.replace(cast_data.replace(r"^\N*$", math.nan, regex=True))

运行代码后抛出如下正则错误:

re.error: missing { at position 3
报错原因

报错由两个问题共同导致:

  • 正则转义错误:Python正则语法中,\N是用于匹配Unicode命名字符的特殊标记,要求必须配合{Unicode字符名}的格式使用(例如\N{EM DASH}匹配长破折号)。代码中直接写\N没有跟随{,正则引擎解析到该位置时直接抛出missing {的错误,需要对反斜杠做转义才能匹配字面量的\N字符串。另外原正则写的\N*会匹配0到多个N,会误匹配空字符串,不符合精确替换\N的需求。
  • replace调用逻辑错误:代码嵌套调用了两次replace,外层replace将内层replace的返回结果(一个DataFrame对象)作为替换映射传入,完全不符合pandas.DataFrame.replace的参数要求,即使正则不报错也无法得到预期结果。
正确实现方案

两种常用实现方式可按需选择:

  • 方式1:读取CSV时直接指定空值标记,运行效率最高
import math
import pandas as pd

# 读取时直接将\N识别为NaN,无需后续额外替换,pandas默认NaN与math.nan完全等价
cast_data = pd.read_csv("cast.csv", na_values=r"\N")
  • 方式2:数据加载完成后做替换,修正正则与调用逻辑
import math
import pandas as pd

cast_data = pd.read_csv("cast.csv")
# 双反斜杠转义匹配字面量\N,直接接收replace返回值赋值给原变量
cast_data = cast_data.replace(r"^\\N$", math.nan, regex=True)

如果需要匹配样例中\N|这类带后缀的脏\N值,可以将正则调整为r"^\\N.*"即可。

内容的提问来源于stack exchange,提问作者blacklion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:24:31