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

为何无法在pandas的drop()方法中使用df.loc()指定删除行?

问题原因与解决方法

为什么你的代码会报错?

你传入drop()的df.loc['NL':'QC']是完整的DataFrame对象,但drop()方法的第一个参数labels需要的是行索引标签(axis=0时)或列名(axis=1时),而非整个DataFrame。

当默认axis=0(操作行)时,pandas会把传入的DataFrame的列名当成要删除的行索引标签去查找,而你的行索引是省份名称,自然找不到province、province_name这些列名,所以报错。

当你设置axis=1时,pandas会把这些列名当成要删除的列,所以所有列都被删掉了,剩下的是无列的空DataFrame——你看到的"仅保留NL到QC的索引"是误解,那其实还是原DataFrame的行索引,只是列被清空了。

正确的删除方式

方法1:传递行索引标签

提取df.loc['NL':'QC']的索引,传给drop():

df.drop(df.loc['NL':'QC'].index)

方法2:直接用index参数指定切片(pandas 1.4.0及以上版本支持)

更简洁的写法,直接在drop()里通过index参数传入行切片:

df.drop(index='NL':'QC')

方法3:切片取反(替代思路)

如果想保留NL到QC之外的行,也可以直接取反筛选:

df = df.loc[~df.index.isin(df.loc['NL':'QC'].index)]
# 若索引是有序的,还可以这么写(假设PE是NL的前一个索引,ON是QC的后一个)
df = pd.concat([df.loc[:'PE'], df.loc['ON':]])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:55:06