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

如何在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)

关键说明

  1. 去掉了所有多余的字符串转换与拆分步骤,直接使用preprocess返回的词列表;
  2. 新增了对空文本/空值的处理,避免word_tokenize报错;
  3. 通过标记特殊值或过滤空行,彻底解决空字符串/空列表导致的相似度误判问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:45:41