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

如何用Python Pandas向CSV指定行写入NER训练数据?

解决方案

针对你生成NER训练CSV的需求,推荐两种可靠的实现方式,避免之前计数器结合df.loc[]导致的同步问题:

方法一:先构建完整数据结构再生成DataFrame

先按评论维度整理好所有行数据,给每个评论的首行分配Comment #,后续行留空,再统一转成DataFrame导出:

import pandas as pd

# 示例:comments_data是已整理好的每条评论的行数据,子列表内是该行的其他字段(如文本、标签)
comments_data = [
    [["用户提到的实体1", "PER"], ["无关文本", "O"], ["地点信息", "LOC"]],
    [["另一评论文本", "O"], ["机构名称", "ORG"]]
]

final_rows = []
# 遍历每条评论,生成带Comment #的行
for comment_idx, rows in enumerate(comments_data, start=1):
    # 处理评论首行:添加Comment编号
    first_row = [f"Comment {comment_idx}"] + rows[0]
    final_rows.append(first_row)
    # 处理评论后续行:Comment #列留空
    for row in rows[1:]:
        final_rows.append([""] + row)

# 转成DataFrame并导出
df = pd.DataFrame(final_rows, columns=["Comment #", "Text", "Label"])
df.to_csv("ner_train_data.csv", index=False, encoding="utf-8")

方法二:逐行写入CSV(适合大数据场景)

如果数据量较大,不想先在内存中存储全量数据,可以用Python内置的csv模块逐行写入,精准控制每一行的Comment #值:

import csv

comments_data = [
    [["用户提到的实体1", "PER"], ["无关文本", "O"], ["地点信息", "LOC"]],
    [["另一评论文本", "O"], ["机构名称", "ORG"]]
]

with open("ner_train_data.csv", "w", newline="", encoding="utf-8") as csv_file:
    writer = csv.writer(csv_file)
    # 写入表头
    writer.writerow(["Comment #", "Text", "Label"])
    
    for comment_idx, rows in enumerate(comments_data, start=1):
        # 写入评论首行
        writer.writerow([f"Comment {comment_idx}"] + rows[0])
        # 写入评论后续行(Comment #列空)
        for row in rows[1:]:
            writer.writerow([""] + row)

为什么之前的方法会同步失败?

df.loc[]依赖DataFrame的索引,如果你的操作中存在行删除、索引不连续的情况,定位"第一个空行"就会出错。上面两种方法都是从源数据结构出发,直接为每一行分配Comment #值,完全规避索引混乱的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:45:37