Python Pandas中DataFrame.pop与DataFrame.drop方法有何区别
Pandas
DataFrame.pop() 与 DataFrame.drop() 差异说明 你的核心判断是正确的:dataframe.pop 移除指定列时会返回被移除的列内容,dataframe.drop 不会单独返回被移除的列,二者的具体行为差异可以拆解为以下几点:
df.pop()的行为逻辑- 仅支持传入单个列名作为参数,调用后会直接在原DataFrame上原地删除目标列,不需要额外设置原地修改参数
- 返回值就是被删除的整列(Series类型),可以直接赋值给变量留存使用
- 如果传入的列名不存在,会直接抛出KeyError
示例代码:
import pandas as pd df = pd.DataFrame({"A": [1,2,3], "B": [4,5,6], "C": [7,8,9]}) # 弹出B列 removed_col = df.pop("B") print(removed_col) # 0 4 # 1 5 # 2 6 # Name: B, dtype: int64 print(df) # 原DF已经删除B列 # A C # 0 1 7 # 1 2 8 # 2 3 9df.drop()的行为逻辑- 灵活性更高,支持同时删除多列、多行,通过
axis参数指定删除维度(axis=1为删列,axis=0为删行) - 默认不会修改原DataFrame,会返回一个完成删除操作的新DataFrame;如果需要原地修改原数据,需要显式传入
inplace=True,此时方法返回值为None - 不会单独返回被删除的内容,仅返回删除后剩余的完整DataFrame(非原地模式下);还可以通过
errors参数配置当待删除标签不存在时的处理逻辑,比如设置errors='ignore'就不会抛出KeyError
示例代码:
df = pd.DataFrame({"A": [1,2,3], "B": [4,5,6], "C": [7,8,9]}) # 默认非原地模式:返回删除B、C列后的新DF,原DF不受影响 df_after_drop = df.drop(columns=["B", "C"]) print(df_after_drop) # A # 0 1 # 1 2 # 2 3 # 原地删除模式:直接修改原DF,无有效返回值 df.drop(columns=["B"], inplace=True) print(df) # 原DF已删除B列 # A C # 0 1 7 # 1 2 8 # 2 3 9- 灵活性更高,支持同时删除多列、多行,通过
简单总结使用场景:如果删除列时需要复用被删掉的列内容,直接用pop()写法最简洁;如果需要批量删除行列、或者不想改动原始数据做链式处理,用drop()更合适。
内容的提问来源于stack exchange,提问作者Kandy
相关产品推荐
相关产品推荐

