如何从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
相关产品推荐
相关产品推荐

