如何对DataFrame按每50元素分批迭代并执行测试?
分批处理DataFrame的优化方案
针对你需要每50条数据执行一次测试的需求,先指出原代码存在的问题,再提供两种可行的解决方案:
原代码的核心问题
- 处理完50条数据后未清空存储列表,导致后续数据持续累加,只会触发一次批次处理逻辑
- 最后一批不足50条的数据无法被处理
iterrows()在处理63万条数据时效率极低,不适合大规模数据集
方法1:修正原循环逻辑
适合需要逐行处理数据再执行批次计算的场景:
import numpy as np mylist_data = [] mylist1_data = [] batch_size = 50 for index, row in df_.iterrows(): mylist_data.append(row.distance) mylist1_data.append(row.day_night) # 达到批次大小,执行测试并重置列表 if len(mylist_data) == batch_size: xmean = np.mean(mylist_data) ymean = np.mean(mylist1_data) # 此处编写你的测试逻辑,比如结果输出、指标计算等 print(f"批次结束索引 {index}: distance均值 = {xmean}, day_night均值 = {ymean}") # 重置列表,准备下一批数据 mylist_data = [] mylist1_data = [] # 处理最后一批不足50条的剩余数据 if mylist_data: xmean = np.mean(mylist_data) ymean = np.mean(mylist1_data) print(f"最后批次(数量 {len(mylist_data)}): distance均值 = {xmean}, day_night均值 = {ymean}")
方法2:使用pandas分组(高效推荐)
针对大规模数据集,利用pandas的向量化操作替代逐行迭代,效率提升显著:
import pandas as pd batch_size = 50 # 生成批次分组键:每50条数据归为一组 df_['batch'] = df_.index // batch_size # 按批次分组处理 for batch_num, group in df_.groupby('batch'): xmean = group['distance'].mean() ymean = group['day_night'].mean() # 此处编写你的测试逻辑 print(f"批次 {batch_num}: distance均值 = {xmean}, day_night均值 = {ymean}") # 可选:删除临时生成的batch列 df_.drop('batch', axis=1, inplace=True)
两种方法对比
- 方法1:逻辑直观,适合需要逐行预处理数据的场景,但处理63万条数据速度较慢
- 方法2:利用pandas内置分组机制,速度快、代码简洁,是大规模数据集的最优选择
内容的提问来源于stack exchange,提问作者user7446890
相关产品推荐
相关产品推荐

