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

使用notnull()过滤Pandas DataFrame时空值未被移除的问题

问题分析与修复方案

你的过滤器没生效,主要是CSV导入时的空值识别、数据类型问题,再加上代码里的小语法错误导致的,具体修复如下:

核心问题点

  • 空值没被正确识别:CSV里的空单元格导入后可能是空字符串"",而notnull()会把空字符串判定为非空,导致过滤逻辑失效。
  • 数值列类型错误:如果数值列被识别成字符串类型,>0的比较根本起不了作用。
  • 语法错误:代码里filter1 | filter 2 | filteretc中的filter 2多了空格,应该写成filter2。

修正后的完整代码

import pandas as pd

# 导入CSV时明确处理空值,指定数值列类型
df = pd.read_csv(
    "file/path/unfiltered.csv",
    na_values=["", " "],  # 把空字符串、空格都识别为NaN
    dtype={
        "Type 1 Data": float,
        "Type 2 Data": float,
        "TypeEtc Data": float
    }
)

# 重新编写过滤器,用isna()判断空值更准确
filter1 = (df["DataType"] == "Type 1") & (~df["Type 1 Data"].isna()) & (df["Type 1 Data"] > 0)
filter2 = (df["DataType"] == "Type 2") & (~df["Type 2 Data"].isna()) & (df["Type 2 Data"] > 0)
filteretc = (df["DataType"] == "TypeEtc") & (~df["TypeEtc Data"].isna()) & (df["TypeEtc Data"] > 0)

# 合并过滤器,注意变量名不要有空格
filtered_df = df[filter1 | filter2 | filteretc]

# 导出时不要带索引,避免多余列
filtered_df.to_csv("file/path/filtered.csv", index=False)

验证步骤(可选)

  • 运行df.info()检查列类型,确保数值列是float64而非object。
  • 运行df.isna().sum()查看空值统计,确认空单元格已被转为NaN。
  • 单独打印过滤器结果(比如print(filter1)),确认符合条件的行被正确标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:37:38