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

如何实现按DataFrame行列结构的分组式分词?

按DataFrame行列结构生成嵌套分词结果的实现方法

原始数据

原始DataFrame结构如下:

A            B       C          D            E           F
0 Orange     robot   x eyes   discomfort   striped tee    nan
1 orange     robot  blue beams   grin      vietnam jacket nan
2 aquamarine robot   3d          bored        cigarette   nan   

问题分析

直接将DataFrame转为字符串后分词,会丢失原有的行列和单元格边界信息,得到扁平的分词列表,无法满足按行列分组的嵌套结构需求。

解决方案

直接对DataFrame的每个单元格单独进行清洗、分词处理,保留原始行列结构。

步骤1:定义单元格处理函数

该函数负责处理单个单元格的内容:判断是否为NaN,对字符串进行小写转换、特殊字符移除、分词操作,最终返回分词后的列表(或保留NaN)。

import re
from nltk.tokenize import word_tokenize
import pandas as pd

def process_cell(cell):
    if pd.isna(cell):
        return cell
    # 转小写
    lower_text = str(cell).lower()
    # 移除非字母数字和空格的特殊字符
    cleaned_text = re.sub(r"[^a-zA-Z0-9 ]", "", lower_text)
    # 分词
    tokens = word_tokenize(cleaned_text)
    # 返回分词列表,空内容则返回原单元格值
    return tokens if tokens else cell

步骤2:应用函数到整个DataFrame

使用applymap方法对DataFrame的每个单元格应用上述函数,再转为列表格式即可得到嵌套结构的结果:

# 假设你的DataFrame变量名为df
tokenized_result = df.applymap(process_cell).values.tolist()

最终输出结果

执行后得到的结果与期望结构一致:

[
    ['orange'], ['robot'], ['x', 'eyes'], ['discomfort'], ['striped', 'tee'], nan,
    ['orange'], ['robot'], ['blue', 'beams'], ['grin'], ['vietnam', 'jacket'], nan,
    ['aquamarine'], ['robot'], ['3d'], ['bored'], ['cigarette'], nan
]

注:你期望结果中第三行的['sea', 'captains', 'hat']在原始DataFrame的F列中无对应数据,若实际数据存在该内容,上述代码会自动处理并生成对应的分词列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:05:27