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

Python拆分DataFrame:提取每n行及剩余行的方法与报错解决

解决方案:拆分DataFrame为「每n行」与剩余数据,及修复drop报错问题

需求一:生成包含原DataFrame每n行的DataFrame和剩余数据的DataFrame

这里有两种实用方法,你可以根据习惯选择:

方法1:索引提取+删除法

假设原DataFrame为df,要提取每n行(以n=10为例):

import pandas as pd

# 示例原DataFrame
df = pd.DataFrame({'data': range(100)})
n = 10

# 提取每n行的DataFrame
every_n_rows = df.iloc[::n, :]

# 删除已选行的索引,得到剩余数据
remaining_rows = df.drop(every_n_rows.index, axis=0)

方法2:布尔掩码筛选法

这种方式逻辑更直观,通过布尔数组标记行的归属:

# 创建掩码:True对应每n行的位置,False对应剩余行
mask = df.index % n == 0

# 提取每n行
every_n_rows = df[mask]

# 取掩码反值,得到剩余数据
remaining_rows = df[~mask]

如果需要调整起始行(比如从第2行开始每n行),只需把掩码改成df.index % n == 1即可,灵活性拉满。


需求二:修复drop触发的ValueError问题

你遇到的问题很典型:new.drop([x_test1], axis=0)中,你传入了整个DataFramex_test1,但drop方法需要的是行的索引标签,不是DataFrame对象,所以触发了报错。这里有三种快速修复方案:

方案1:直接传入x_test1的索引

这是最简洁的修改方式,直接替换你原有的drop代码:

dataset = new.drop(x_test1.index, axis=0)

drop会识别这些索引标签并删除对应行。

方案2:布尔索引反选

和需求一的思路呼应,通过掩码排除已选行:

# 标记哪些行属于x_test1
mask = new.index.isin(x_test1.index)
# 取反得到剩余行
dataset = new[~mask]

方案3:一步到位提取剩余行

其实你可以在提取x_test1的同时,直接生成剩余数据:

x_test1 = new.iloc[::10, :]
# 获取原DataFrame中不在x_test1里的索引
remaining_indices = new.index.difference(x_test1.index)
dataset = new.loc[remaining_indices]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:52:45