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

如何移除Pandas DataFrame每行字符串列表中的空字符串?

解决Pandas DataFrame列表列中空字符串的过滤问题

先分析你之前方法失效的原因:

  • 第一种方法:语法错误+逻辑错误。df['Description', ...]的索引方式不对,而且你的列表推导式是直接遍历整个Series(每个元素是列表),判断的是整个列表是否非空,不是过滤列表里的空字符串,完全不符合需求。
  • 第二种方法:逻辑错误+对象类型错误。df['Description']是Pandas的Series对象,不是普通Python列表,不能直接调用remove();而且你是检查空字符串是否存在于Series中,而不是每个子列表里,根本没处理到每行的内容。
  • 第三种方法理论上有效,如果失效,大概率是你的Description列存储的不是实际的Python列表,而是字符串形式的列表(比如从CSV/JSON读取时没解析成列表,存成了类似"['', 'Hello', ...]"的字符串)。

针对两种场景的解决方案:

场景1:Description列确实是Python列表对象

直接用apply()遍历每行的列表,过滤空字符串即可,两种写法都可以:

# 方法一:列表推导式(更灵活,可扩展过滤空格字符串)
df['Description'] = df['Description'].apply(lambda x: [s for s in x if s])

# 如果需要同时过滤带空格的空字符串(比如'   '),可以加strip()
df['Description'] = df['Description'].apply(lambda x: [s for s in x if s.strip()])

# 方法二:filter函数(和上面等价,只过滤纯空字符串'')
df['Description'] = df['Description'].apply(lambda x: list(filter(None, x)))

场景2:Description列是字符串形式的列表

先把字符串解析成Python列表,再过滤空字符串:

import ast

# 第一步:将字符串形式的列表转为实际列表对象
df['Description'] = df['Description'].apply(ast.literal_eval)
# 第二步:过滤空字符串
df['Description'] = df['Description'].apply(lambda x: [s for s in x if s])

测试验证

用示例数据测试:

import pandas as pd
data = {
    'Description': [
        ['', 'Hello', 'The house is warm', '', 'What time is it'],
        ['', 'Hi', '', 'Goodbye']
    ]
}
df = pd.DataFrame(data)

# 执行处理
df['Description'] = df['Description'].apply(lambda x: [s for s in x if s])
print(df)

输出结果:

Description
0  [Hello, The house is warm, What time is it]
1                      [Hi, Goodbye]

内容的提问来源于stack exchange,提问作者Lewis-010

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:20:59