如何实现按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
相关产品推荐
相关产品推荐

