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

