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

TypeError: write() argument must be str, not Series 如何将dataframe.apply结果保存为json文件

问题解决:将Pandas处理得到的NER训练数据正确保存为JSON文件

报错原因

你遇到的报错有两个核心诱因:

  • df.apply()执行后返回的是Pandas Series对象,不是可直接写入文件的字符串类型,无法直接传给write()方法
  • 你的返回结果中包含大量Python元组结构,JSON格式原生不支持元组,序列化前需要统一转换为列表类型

修改后可运行代码

import pandas as pd
import numpy as np
import json

df = pd.read_csv("file")

def get_lengths(s):
    cols = s.index[::2]
    labels = s.index[1::2]
    l = list(np.cumsum(list(map(len, s[cols]))))
    l = list(zip([0]+l[:-1], l))
    # 所有元组转列表,适配JSON格式要求
    entities = [[list(item) for item in zip(l, labels)]]
    return [' '.join(s[cols]), {'entities': entities}]

# 将Series转为普通Python列表
TRAIN_DATA = df.apply(get_lengths, axis=1).tolist()

# 序列化写入JSON文件
with open('G:/Downloads/output5.json', 'w', encoding='utf-8') as f:
    json.dump(TRAIN_DATA, f, ensure_ascii=False, indent=2)

改动说明

  • 补充了原代码缺失的pandas导入声明
  • 调整了get_lengths函数的返回值,将所有Python元组转换为列表,符合JSON序列化规则
  • 使用tolist()方法将Pandas Series对象转换为普通Python列表
  • 改用json.dump()方法直接将Python对象序列化为JSON字符串写入文件,指定utf-8编码避免乱码,新增indent参数让输出的JSON格式更易读

如果后续读取该JSON文件后需要元组结构,手动遍历把对应位置的列表转回元组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:21:02