
将 pandas series 转为 json 字符串时,nan 值会导致 `json.dumps()` 报错(因 json 标准不支持 nan),需先剔除或替换缺失值;推荐使用 `dropna()` 清洗后再序列化。
在使用 Pandas 处理标识符(如股票代码、产品 ID)列并导出为 JSON 供下游系统(如 PostgreSQL 的 JSONB 查询、API 请求体)使用时,一个常见陷阱是:原始数据中存在缺失值(NaN),而 Python 的 json.dumps() 默认无法序列化 NaN——它会将其转为字符串 "NaN",但该字符串不符合 RFC 7159 JSON 规范,导致数据库或服务端解析失败(如报错 Token "NaN" is invalid)。
正确做法是在序列化前彻底移除或标准化缺失值。最简洁、安全的方式是使用 .dropna():
import json
import pandas as pd
# 示例数据
df = pd.DataFrame({
'identifier': ['US00B8KQN827', 'US0530151036', 'CA82509L1076', None, 'GB00BH4HKS39', float('nan')]
})
# ✅ 正确:先丢弃 NaN/None,再转 JSON 列表
json_list = json.dumps(df['identifier'].dropna().tolist())
print(json_list)
# 输出: ["US00B8KQN827", "US0530151036", "CA82509L1076", "GB00BH4HKS39"]⚠️ 注意事项:
- dropna() 同时移除 None、numpy.nan 和 pandas.NA,兼容多种缺失值类型;
- 若需保留空字符串占位(而非删除),可用 fillna("") 替代,但需确保业务逻辑允许空字符串;
- 切勿使用 str.replace('NaN', '') 或正则清洗 JSON 字符串——这属于事后补救,易引入格式错误(如破坏嵌套结构或引号配对);
- 在构建 SQL 查询(如 WHERE identifier IN (...))时,建议进一步校验列表长度,避免空列表导致语法错误。
总结:JSON 序列化前的数据清洗应在 Pandas 层完成,df['col'].dropna().tolist() 是处理含缺失值标识符列转 JSON 的标准、高效且健壮的模式。










