如何按每5行拆分无分组变量的Pandas DataFrame?
按固定行数拆分Pandas DataFrame的实现方法
这问题我平时处理批量数据时经常碰到,用Pandas结合Numpy就能轻松搞定,给你分享两种实用的方法,都能自动处理最后一组不足指定行数的情况:
方法一:使用numpy.array_split(推荐)
array_split是最省心的方式,它会自动根据总长度和每组大小计算分组数,最后一组不足的话也会完整保留:
import pandas as pd import numpy as np # 假设你的原始DataFrame是df # 按每5行拆分,返回一个包含所有小DataFrame的列表 split_dfs = np.array_split(df, np.ceil(len(df) / 5).astype(int))
如何调用拆分后的DataFrame?
split_dfs是一个列表,你可以通过索引直接访问每个小DataFrame:
split_dfs[0]对应你要的df1(前5行)split_dfs[1]对应df2(接下来5行)- ...以此类推
如果一定要把每个小DataFrame单独命名成df1、df2这种,可以用循环快速赋值:
for idx, sub_df in enumerate(split_dfs, start=1): globals()[f'df{idx}'] = sub_df
方法二:使用Pandas的groupby
通过计算每行的分组键,再按分组键拆分,逻辑更直观:
import pandas as pd # 计算每行所属的分组:行索引整除5,前5行(索引0-4)归为组0,下一组归为组1,以此类推 group_keys = df.index // 5 # 按分组键分组,再转换为DataFrame列表 split_dfs = [group for _, group in df.groupby(group_keys)]
这种方法的好处是可以自定义分组逻辑,比如你以后想调整每组行数,只需要改//后面的数字就行。
效果验证
针对你给出的16行DataFrame:
- 两种方法都会拆分成4个小DataFrame
- 前3组各5行,最后1组1行,完全符合你的需求
小提醒:如果不是必须单独命名,建议用列表
split_dfs存储所有拆分后的DataFrame,后续遍历操作会更灵活哦!
内容的提问来源于stack exchange,提问作者OwnWork
相关产品推荐
相关产品推荐

