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

Python-Pandas:对DataFrame执行原地修改操作时如何避免KeyError

示例

创建测试df:

import pandas as pd
import numpy as np

def f_test_df(n_rows, n_cols):
    df1 = pd.DataFrame(np.random.rand(n_rows, n_cols))
    df = df1.applymap(lambda x: round(x*10))
    return df 

np.random.seed(seed=1)
df1 = f_test_df(7, 7)

示例数据展示

现在执行会修改原始DataFrame本身的原地操作:

df1.drop(columns=[2, 3, 4, 5, 6],
         inplace=True)

修改后数据展示

如果重复运行上述代码,会触发KeyError,因为此时DataFrame已经被修改,所有修改DataFrame本身的操作都存在该问题。

现有解决方案是使用try-except结构,如下所示:

try:
    df1.drop(columns=[2, 3, 4, 5, 6],
             inplace=True)
except:
    pass

上述写法可以避免出现KeyError,但实现方式不够优雅。请问是否存在更符合Python风格的实现方式?在对原始df执行原地修改操作时,如何避免触发KeyError?


解答

pandas的drop方法原生提供了errors参数来处理这类场景,你只需要将参数值设为ignore,就会自动跳过不存在的列/行,不会抛出KeyError,无需额外写异常捕获逻辑,是最符合Python风格的原生解法:

df1.drop(columns=[2, 3, 4, 5, 6],
         inplace=True,
         errors='ignore')

errors参数默认值为raise,即遇到不存在的标签时抛出错误;改为ignore后,方法仅删除实际存在的目标标签,不存在的直接忽略,完全匹配需求。

另外更推荐优先避免使用原地操作,原地修改容易带来不可预期的副作用,常规写法直接将修改后的结果赋值给新变量即可:

df_new = df1.drop(columns=[2, 3, 4, 5, 6], errors='ignore')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:06:00