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

如何在Python Pandas中删除DataFrame里全为零的字符串行?

嘿,我来给你几个实用的方案,不用死磕正则也能轻松搞定删除全零字符串行的需求!

方案1:通用型(兼容各种零格式)

如果你的DataFrame里的零字符串有多种形式(比如"0"、" 0 "、"0.0"、"000"这类),可以写一个小函数来判断每个单元格是否是零的字符串,再逐行检查:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'col1': ['123', 'abc', '0'],
    'col2': ['456', '0', '0'],
    'col3': ['789', 'def', '0']
})

def is_zero_str(s):
    # 先去掉前后空格,尝试转成数值判断是否为0
    stripped_s = s.strip()
    try:
        num = float(stripped_s)
        return num == 0
    except ValueError:
        # 转不成数值的肯定不是零,返回False
        return False

# 过滤掉所有单元格都是零字符串的行
df_filtered = df[~df.apply(lambda row: all(is_zero_str(cell) for cell in row), axis=1)]

这个方法容错性很强,就算行里有非数字的字符串也不会报错,只会保留那些不全是零的行。

方案2:简化版(仅严格匹配"0")

如果你的零字符串都是严格的"0"(没有空格、小数形式等变体),那直接用等式判断就行,代码更简洁:

df_filtered = df[~(df == "0").all(axis=1)]

(df == "0")会生成一个布尔值的DataFrame,all(axis=1)检查每行是否全为True,最后用~取反,保留不全是零的行。

方案3:正则表达式版(如果一定要用)

要是你还是想用正则,这里给你一个能覆盖常见零格式的正则表达式,同样结合apply来用:

import re

def matches_zero(s):
    # 匹配:前后可选空格 + 至少一个0 + 可选小数点 + 任意个0
    pattern = r'^\s*0+\.?0*\s*$'
    return bool(re.fullmatch(pattern, s))

df_filtered = df[~df.apply(lambda row: all(matches_zero(cell) for cell in row), axis=1)]

这个正则能匹配"0"、" 0.00 "、"000"这类形式的零字符串,确保整个单元格内容都是零相关的格式。

你可以根据自己DataFrame里零字符串的实际格式,选最适合的方案就行!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:14:10