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

使用Python+Spacy循环处理句子并提取词性至DataFrame的问题

解决Spacy词性标注后高效存入DataFrame的问题

问题根源

你碰到的PerformanceWarning,是因为循环里反复调用insert添加列——每一次插入都会重构DataFrame的内存结构,次数多了就会导致数据碎片化,拖慢性能。

优化方案:一次性生成所有POS列再合并

核心思路是先把所有句子的POS结果批量处理成结构化的DataFrame,再和原数据合并,只做一次合并操作,彻底避免频繁修改原DataFrame的问题。

具体代码实现

  1. 加载Spacy模型(根据语言选择对应模型,示例用英文模型)
import spacy
import pandas as pd

# 加载Spacy模型,中文替换为zh_core_web_sm
nlp = spacy.load("en_core_web_sm")
  1. 定义单句处理函数,返回该句所有token的词性列表
def extract_pos(sentence):
    doc = nlp(sentence)
    return [token.pos_ for token in doc]
  1. 批量处理所有句子,生成词性结果的DataFrame
# 假设原DataFrame的句子列名为"sentence",请根据实际情况修改
pos_results = sentences["sentence"].apply(extract_pos)

# 把每个句子的词性列表展开为列,自动生成text1、text2...格式的列名
max_token_count = max(pos_results.apply(len))
pos_df = pd.DataFrame(
    pos_results.tolist(),
    columns=[f"text{i+1}" for i in range(max_token_count)]
)
  1. 合并原数据与词性结果
final_data = pd.concat([sentences, pos_df], axis=1)
  1. 直接导出到Excel
final_data.to_excel("词性标注结果.xlsx", index=False)

方案优势

  • 彻底消除数据碎片化警告,性能比循环插入列提升明显
  • 代码简洁无嵌套循环,可读性和维护性更高
  • 全程自动化处理,无需逐句编写重复代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:17:00