如何按day字段拆分Pandas DataFrame及遍历返回空问题的修复方法
问题原因
- 遍历范围错误:
range(len(df_sec))生成从0开始的整数序列,而你的day字段取值从1开始,同时你遍历的长度是df_sec的行数,而非day字段的最大有效值,循环后期的i值大多没有对应的day记录,你最后打印的是循环最后一次迭代的df,大概率对应无匹配的i值,所以返回空数据框。 - 循环变量手动赋值无效:for循环的迭代变量i会在每次循环开始时自动被
range生成的序列值覆盖,你在循环内写的i=i+1不会对下一次循环的i值产生任何影响,属于无效代码。 - 未存储拆分结果:每次循环你都用新的筛选结果覆盖
df变量,前面拆分好的对应其他日期的数据框会被直接丢弃,无法保留所有拆分结果。
修复方案
方案1:遍历唯一日期值存储结果
直接取day字段的所有唯一值遍历,把每个拆分后的df存入字典,key为日期值,方便后续调用:
# 初始化存储拆分结果的字典 day_dfs = {} # 遍历所有唯一的day值 for day_val in prediction['day'].unique(): day_dfs[day_val] = prediction[prediction['day'] == day_val] # 调用示例:获取day=1的数据框 print(day_dfs[1])
方案2:用pandas内置groupby更高效实现
不需要手动写循环,直接用groupby按day字段分组,转字典即可一步完成拆分:
day_dfs = dict(tuple(prediction.groupby('day'))) # 调用示例:获取day=29的数据框 print(day_dfs[29])
内容的提问来源于stack exchange,提问作者Giorgos
相关产品推荐
相关产品推荐

