如何将文本分句并生成每行一句的新DataFrame?
拆分Pandas DataFrame列表列,实现每行对应单个句子
别用循环拼接这种低效方式,Pandas自带的explode()方法就能完美解决你的需求,而且速度快很多。
正确实现步骤
- 先完成分句(你这部分代码没问题)
import nltk import pandas as pd # 生成分句后的列表列 df['sentences'] = df['text'].apply(lambda x: nltk.sent_tokenize(x))
- 用
explode拆分列表并整理结构
直接对sentences列执行explode,把列表里的每个句子拆成单独一行,同时保留对应filename和president的值,最后重命名列并选择需要的字段:
data_sentence = df.explode('sentences').rename(columns={'sentences': 'sentnew'})[['filename', 'president', 'sentnew']]
关于你原有代码的问题
如果你的循环代码运行后没得到预期结果,先检查df['sentences']的内容:确认每个单元格都是包含多个句子的列表,而非字符串或空值。可以用下面的代码排查:
# 检查sentences列的元素类型分布 print(df['sentences'].apply(type).value_counts()) # 查看前几行的分句结果 print(df['sentences'].head())
如果确实是列表类型,你的循环代码理论上能运行,但反复concat会导致数据量大时性能极差,所以优先用explode方案。
内容的提问来源于stack exchange,提问作者datascientistxxx
相关产品推荐
相关产品推荐

