如何在Pandas中对数据每5行重复执行转置操作?
批量处理Pandas每5行转置的解决方案
嘿,你的初始代码已经搞定了前5行的转置,要批量处理剩下的每5行数据,我给你分享两种实用的方法,都是Pandas里常用的思路:
方法一:用分组(groupby)实现高效处理
这是最符合Pandas风格的写法,不用手动写循环,效率还高:
import pandas as pd # 读取原始数据 df = pd.read_csv('https://s3.amazonaws.com/todel162/kaggle_unicode1.txt', encoding='utf8', sep='`', header=None) # 按每5行分组,对每组执行转置和列名设置 grouped = df.groupby(df.index // 5) result_list = [] for _, group in grouped: transposed_group = group.T transposed_group.columns = ['task_name', 'task_description', 'task_date', 'task_prize', 'task_teams'] result_list.append(transposed_group) # 合并所有处理后的结果为一个完整DataFrame final_result = pd.concat(result_list, ignore_index=True)
这里的df.index // 5会自动把每5行划为一组(比如第0-4行是一组,5-9行是下一组),每组转置后设置好列名,最后把所有组的结果拼在一起就行。
方法二:手动循环遍历每5行
如果你更喜欢直观的循环逻辑,也可以这么写:
import pandas as pd df = pd.read_csv('https://s3.amazonaws.com/todel162/kaggle_unicode1.txt', encoding='utf8', sep='`', header=None) result_list = [] # 以步长5遍历索引,每次取5行数据 for start_idx in range(0, len(df), 5): # 截取当前5行的子集 subset = df.iloc[start_idx:start_idx+5] transposed_subset = subset.T transposed_subset.columns = ['task_name', 'task_description', 'task_date', 'task_prize', 'task_teams'] result_list.append(transposed_subset) final_result = pd.concat(result_list, ignore_index=True)
这个逻辑很简单:从0开始,每次跳5个索引,取对应的5行数据转置,处理完后加入结果列表,最后合并成最终的DataFrame。就算最后一组不足5行,iloc也会自动取到数据末尾,不会报错。
你可以用final_result.head(10)查看前两组的结果,确认和你手动处理前5行的结构一致~
内容的提问来源于stack exchange,提问作者shantanuo
相关产品推荐
相关产品推荐

