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

如何实现spaCy分句结果在Pandas DataFrame中的预期格式输出?

如何调整spaCy分句代码以得到预期的Pandas DataFrame格式?

嘿,我懂你现在的困扰——用spaCy分句后存进DataFrame,结果每个单词都被拆成了单独的列,完全不是想要的整句格式对吧?其实问题出在你直接把spaCy返回的Span对象丢进了DataFrame,Pandas会自动把这些Span拆成单个token,所以才会出现多列的情况。只需要加一步转换,把每个分句变成字符串就行啦!

问题根源

doc.sents返回的是spaCy的Span对象迭代器,每个Span代表一个分句,但它本质上是一系列token的集合。当你直接把这些Span放进DataFrame时,Pandas会把集合里的每个token拆成单独的列,这就是你看到当前输出的原因。

修正后的完整代码

# -*- coding: utf-8 -*-
#!/usr/bin/env python
from __future__ import unicode_literals
import spacy, en_core_web_sm
import pandas as pd

# 加载spaCy英文小模型
nlp = en_core_web_sm.load()

# 读取文本文件(用with语句更安全,避免文件未关闭)
with open('o.txt', 'r') as f:
    text_content = f.read().decode('utf8')  # 适配Python 2的编码处理
doc = nlp(unicode(text_content))

# 打印分句结果(可选步骤,验证分句是否正确)
for idno, sentence in enumerate(doc.sents):
    print 'Sentence {}:'.format(idno + 1), sentence

# 关键一步:把每个分句Span转换成字符串,存入列表
sentences_list = [str(sent) for sent in doc.sents]

# 创建DataFrame,直接用字符串列表即可
df = pd.DataFrame(sentences_list)
print df

代码说明

  1. 字符串转换:[str(sent) for sent in doc.sents]这行代码把每个分句Span转换成完整的字符串,这样列表里的每个元素都是一整句话。
  2. DataFrame创建:用这个字符串列表创建DataFrame时,Pandas会自动把每个字符串作为一行的单个单元格,刚好符合你想要的格式。
  3. 可选优化:如果你想给列起个更有意义的名字,可以改成df = pd.DataFrame(sentences_list, columns=['完整分句']),输出的列名就会变成你指定的内容。

运行这段代码后,你就能得到和预期完全一致的输出啦:

0
0  This is a sample sentence.
1  This is a second sample sentence.
2  This is a third sample sentence.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:28:50