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

Python Pandas按规则删除行:代码异常问题排查请求

问题排查与修复

核心逻辑错误:过滤条件写反了

你的需求是删除满足Bids < 3 且 Price > 149的行,但当前代码是把符合这个条件的行筛选出来保存——相当于只保留了要删除的行。如果原数据里符合该条件的行数量为0,就会直接生成空CSV;哪怕有符合条件的行,保存的也不是你想要的剩余数据。

正确的逻辑应该是保留不满足删除条件的行,只需对原条件取反:

filtered_df = df[~((df['Bids'] < 3) & (df['Price'] > 149))]

或者拆成更直观的写法:

filtered_df = df[(df['Bids'] >= 3) | (df['Price'] <= 149)]

额外排查点:数据转换的空值问题

你用pd.to_numeric(..., errors='coerce')会把无法转为数字的内容变成NaN,而NaN在布尔判断里会被视为False。如果CSV里Bids或Price列有大量非数字内容,转换后会出现大量空值,导致筛选条件无法匹配,最终结果为空。

可以先检查转换后的数据是否正常:

# 查看哪些行转换失败
print(df[df['Bids'].isna() | df['Price'].isna()])

如果有大量空值,要么先修正原始数据格式,要么把errors='coerce'改成errors='raise'——这样转换失败时会直接报错,方便定位问题。

修复后的完整代码

import pandas as pd

def filter(csv_file, csv2_file):
    df = pd.read_csv(csv_file, header=0, index_col=False)

    # 转换为数值类型,转换失败时抛出错误便于排查
    df['Bids'] = pd.to_numeric(df['Bids'], errors='raise')
    df['Price'] = pd.to_numeric(df['Price'], errors='raise')
    
    # 保留不需要删除的行
    filtered_df = df[~((df['Bids'] < 3) & (df['Price'] > 149))]

    filtered_df.to_csv(csv2_file, index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:47:08