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

Pandas DataFrame每14行分组打乱行时输出空对象如何解决?

问题原因
  • Pandas的DataFrame.append()方法不修改原对象,仅返回拼接后的新DataFrame,原代码未对返回值做赋值,导致初始的空df始终没有被更新。
  • 循环内的i += 1属于冗余代码,for循环遍历range序列时会自动更新迭代变量i,手动修改不会影响循环迭代逻辑。
  • 当前Pandas版本已正式弃用append()方法,更推荐使用pd.concat()完成数据拼接操作。
可行实现方案

方案1:优化原有循环逻辑

使用列表暂存所有打乱后的分组,最后一次性拼接,性能更高且兼容非整数倍行数的场景:

import numpy as np
import pandas as pd

dataset = pd.read_excel('/content/drive/MyDrive/melangev2.xlsx')
df_parts = []
# 步长设为14,遍历所有分组的起始索引
for start_idx in range(0, len(dataset), 14):
    # 取出当前分组并随机打乱,加入临时列表
    df_parts.append(dataset.iloc[start_idx : start_idx + 14].sample(frac=1))
# 拼接所有分组,重置索引避免重复
df = pd.concat(df_parts, ignore_index=True)
print(df)

方案2:基于groupby的简洁实现

无需手动写循环,通过分组标签批量处理:

import numpy as np
import pandas as pd

dataset = pd.read_excel('/content/drive/MyDrive/melangev2.xlsx')
# 生成每14行相同的分组标签
group_tag = np.arange(len(dataset)) // 14
# 按标签分组后对每个分组打乱,重置索引
df = dataset.groupby(group_tag, group_keys=False).apply(lambda x: x.sample(frac=1)).reset_index(drop=True)
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:54:07