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

如何将列表中多语句存入pandas DataFrame及解决评论拆分合并异常

嘿,我来帮你搞定这个问题!

首先得搞清楚你遇到的19列问题到底咋回事:我猜你之前可能是直接把拆分出来的句子列表直接赋值给DataFrame的新列了,结果pandas把每个句子当成了单独的列,才会冒出这么多列——这是因为pandas对列表的赋值逻辑和你预期的不一样,它会把二维列表(每行拆出的句子组成的大列表)的每个子元素当成一列,而不是把每个子列表放进单个单元格里。

下面分两种常见需求给你解决方案:


需求1:原表每行保留,新增一列存该评论的拆分句子列表

这种情况适合你需要保留原评论的整体信息,同时在一列里存拆分后的句子集合。

步骤如下:

  1. 先导入需要的库并下载nltk的分词模型:
import pandas as pd
from nltk.tokenize import sent_tokenize
import nltk
nltk.download('punkt')
  1. 写一个处理单条评论的拆分函数,顺便处理空值避免报错:
def split_into_sentences(text):
    # 处理空评论的情况
    if pd.isna(text):
        return []
    # 用nltk拆分句子
    return sent_tokenize(text)
  1. 给原DataFrame新增列,用apply对每行的评论字段调用拆分函数:
# 假设你的原表叫df,评论字段是'review'
df['split_sentences'] = df['review'].apply(split_into_sentences)

这样每个单元格里就会是一个包含该评论所有拆分句子的列表,不会生成多余的列。


需求2:把每个拆分后的句子单独成一行,关联原表的其他字段

这种情况更适合后续的单句分析,比如统计每个句子的情感、关键词等,每行对应一个句子,原表的其他字段(比如评论ID、用户ID)会跟着重复。

在需求1的基础上,用pandas的explode方法就能轻松实现:

# 把列表列展开成单独的行,ignore_index=True重置索引
df_expanded = df.explode('split_sentences', ignore_index=True)

举个例子,原表一行评论拆出3个句子,用explode后就会变成3行,每行对应一个句子,其他字段和原行保持一致。


举个完整的示例

假设你的原数据是这样的:

data = {
    'review_id': [1, 2],
    'user_id': [1001, 1002],
    'review': [
        "这款耳机音质很棒,续航也够久。就是价格有点小贵,不过值得入手。",
        "物流太慢了,等了五天才到。包装倒是很严实,没有损坏。"
    ]
}
df = pd.DataFrame(data)

按照上面的步骤处理后,df的split_sentences列会是:

review_iduser_idreviewsplit_sentences
11001这款耳机音质很棒,续航也够久。就是价格有点小贵,不过值得入手。["这款耳机音质很棒,续航也够久。", "就是价格有点小贵,不过值得入手。"]
21002物流太慢了,等了五天才到。包装倒是很严实,没有损坏。["物流太慢了,等了五天才到。", "包装倒是很严实,没有损坏。"]

而df_expanded会变成:

review_iduser_idsplit_sentences
11001这款耳机音质很棒,续航也够久。
11001就是价格有点小贵,不过值得入手。
21002物流太慢了,等了五天才到。
21002包装倒是很严实,没有损坏。

这样就完全符合你的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:37:46