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

如何从790行的DataFrame中排除300-400行生成新DataFrame?

解决方法

要排除DataFrame中300至400行(注意区分位置索引和标签索引),可以用以下几种正确实现方式:

方法1:用iloc结合np.r_拼接切片

适合按位置索引(从0开始计数)排除行,比如排除第300到399行(若你是从1开始计数,需调整切片范围):

import numpy as np
df_new = df.iloc[np.r_[:300, 400:]]

np.r_的作用是把两个切片[:300]和[400:]拼接成一个连续的索引数组,供iloc提取对应行。

方法2:布尔索引过滤

灵活性更高,可适配任意索引类型:

# 按位置排除:排除位置300到399的行
exclude_positions = range(300, 400)
mask = ~df.index.isin(df.index[exclude_positions])
df_new = df[mask]

# 如果你的DataFrame索引是从1开始的整数,要排除标签300到400的行:
exclude_labels = range(300, 401)
mask = ~df.index.isin(exclude_labels)
df_new = df[mask]

方法3:修正drop的用法

你之前的drop写法有误,正确的实现如下:

# 按位置排除:获取300到399行对应的索引标签,再删除
df_new = df.drop(df.index[300:400], axis=0)

# 若索引是连续0开始的整数,也可以直接用range:
df_new = df.drop(labels=range(300, 400), axis=0)

你之前代码的问题说明

  • df.loc[[:300, 400:]]/df.iloc[[:300, 400:]]:Pandas不支持在索引中直接传入多个切片的语法,必须用np.r_或布尔索引来组合。
  • df.drop(labels=range([300:400]), axis=0):range的参数写法错误,正确格式是range(start, end),且range(300,400)会生成300到399的整数序列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:55:17