如何在Python Pandas中设置与拆分DataFrame值并解决空字符串问题
解决CSV数据预处理中空字符串导致相似度测试误判的问题
你的代码问题出在多做了完全没必要的字符串转换与拆分操作,反而把预处理好的干净词列表折腾出了空值问题。
问题根源
preprocess函数已经完成了分词、去停用词、去数字的工作,直接返回了干净的词列表。但你后续又把这个列表转成字符串(astype(str))、替换括号逗号,再拆分回列表——这一步完全是画蛇添足:
- 如果预处理后是空列表,转成字符串是
"[]",替换后变成空字符串,后续str.split()返回的空列表会在相似度测试中产生误匹配; - 即使是非空列表,转字符串再拆分的操作也可能引入不必要的异常(比如词本身包含括号的极端情况)。
修改后的代码
直接保留预处理后的列表,同时主动处理空列表的情况,避免相似度测试干扰:
import pandas as pd from nltk.tokenize import word_tokenize # 假设stop是你定义的停用词集合 stop = set(...) def preprocess(text): # 先处理空值/空白文本,避免tokenize报错 if not text or pd.isna(text): return [] return [word for word in word_tokenize(text) if word.lower() not in stop and not word.isdigit()] # 应用预处理,直接保留词列表 df['Product'] = df['Product'].apply(preprocess) df['Issue'] = df['Issue'].apply(preprocess) df['Company'] = df['Company'].apply(preprocess) # 处理空列表:二选一即可 # 选项1:给空列表标记特殊值,避免相似度计算时的空匹配 df['Product'] = df['Product'].apply(lambda x: x if x else ['NO_VALID_CONTENT']) df['Issue'] = df['Issue'].apply(lambda x: x if x else ['NO_VALID_CONTENT']) df['Company'] = df['Company'].apply(lambda x: x if x else ['NO_VALID_CONTENT']) # 选项2:直接过滤掉所有字段都无有效词汇的行(按需选择) df = df[~((df['Product'].str.len() == 0) & (df['Issue'].str.len() == 0) & (df['Company'].str.len() == 0))] # 导出到新CSV df.to_csv('processed_data.csv', index=False)
关键说明
- 去掉了所有多余的字符串转换与拆分步骤,直接使用
preprocess返回的词列表; - 新增了对空文本/空值的处理,避免
word_tokenize报错; - 通过标记特殊值或过滤空行,彻底解决空字符串/空列表导致的相似度误判问题。
内容的提问来源于stack exchange,提问作者Berk Sunduri
相关产品推荐
相关产品推荐

