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

Pandas筛选df1保留breast_exitstat为1/8行运行过慢如何优化

问题原因

你的代码有两个致命问题,这也是运行异常缓慢、结果不符合预期的核心:

  • 变量名拼写错误:第二个判断条件里你写的是df['breast_exitstat'],而非目标对象df1。如果你的运行环境中存在另一个名为df的DataFrame,pandas会先做两个DataFrame列的索引对齐,若两者索引不匹配会生成大量空值,甚至触发隐式的大对象广播,直接把运算速度拖垮。
  • 筛选逻辑写反:你当前的取反写法最终会保留所有breast_exitstat既不等于1也不等于8的行,和你“仅保留取值为1、8的记录”的需求完全相反。
最优实现

7.5万行的行筛选操作正常耗时在毫秒级,用isin()方法做集合匹配,比多条件或运算拼接效率更高、写法更简洁,也不容易写错:

df1 = df1[df1['breast_exitstat'].isin([1, 8])]

如果要明确指定用.loc索引(避免pandas的链式赋值警告),可以写成:

df1 = df1.loc[df1['breast_exitstat'].isin([1, 8]), :]
异常慢的额外排查项

如果修正代码后运行仍然卡顿,优先检查两个点:

  • 列类型问题:执行df1['breast_exitstat'].dtype查看列类型,如果是object类型(说明列里混了字符串、空值、其他类型数据),先转成数值类型再筛选:
    df1['breast_exitstat'] = pd.to_numeric(df1['breast_exitstat'], errors='coerce')
    
  • 内存问题:如果你的运行环境内存占用已经满了,pandas会触发磁盘交换,所有操作的速度会下降几十到上百倍,先释放不用的大对象再执行操作。

不建议用取反+多个等于判断拼接的写法,不仅冗余容易写错,匹配效率也低于原生的isin()集合判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:48:32