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

如何在Pandas链式调用中删除含指定列值的行?

Pandas链式调用中删除指定列值对应行的正确方法

问题分析

你遇到的报错原因有两个:

  1. 链式调用中直接引用外部df变量会触发TypeError:因为链式赋值还未完成,此时df是None,无法通过df[...]取值。
  2. .drop(["cut_quality"].str.contains("None").index)触发AttributeError:["cut_quality"]是Python列表,没有Pandas的str属性,属于语法错误。

最优解决方案

在链式调用中,推荐直接用布尔索引筛选保留行(比drop更直观高效),通过lambda引用当前步骤的DataFrame即可:

df = (pd.read_csv("../data/stones_raw.csv", index_col=[0])
    .drop(['date', 'id'], axis=1)
    .fillna({'color':'unknown', 'cut_quality':'unknown',  
             'girdle_max':'unknown', 'fluor_intensity':'unknown' })       
    .loc[:, ['color', 'cut_quality', 'girdle_max', 'fluor_intensity']]             
    .loc[lambda x: ~x["cut_quality"].str.contains("None")]  # 筛选出不含"None"的行
    .to_pickle("../data/stones.pkl")
)

补充:如果坚持用drop

也可以通过lambda获取需要删除的索引,写法如下:

df = (pd.read_csv("../data/stones_raw.csv", index_col=[0])
    .drop(['date', 'id'], axis=1)
    .fillna({'color':'unknown', 'cut_quality':'unknown',  
             'girdle_max':'unknown', 'fluor_intensity':'unknown' })       
    .loc[:, ['color', 'cut_quality', 'girdle_max', 'fluor_intensity']]             
    .drop(lambda x: x[x["cut_quality"].str.contains("None")].index)  # 通过lambda获取当前DataFrame的索引
    .to_pickle("../data/stones.pkl")
)

说明

  • 用lambda x可以在链式调用中访问当前步骤的DataFrame,避免引用未赋值完成的外部变量。
  • 直接筛选保留行的方式(.loc[lambda x: ...])比drop更符合链式调用的流畅性,代码可读性更高,执行效率也更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:55:16