Python按2000行拆分DataFrame后出现行丢失、末块混乱问题求助
问题核心原因
- 循环结束后的else分支逻辑错误:原代码追加的是
df,而非切分后剩余的df_count,直接导致最后一个分块不是预期的尾部不足2000行的内容,而是错误的全量/其他内容,同时剩余的有效行可能未被正确入队,引发数据丢失、内容混乱的问题。 - 切片方式隐患:直接用
df_count[:max_rows]按索引切片,如果DataFrame不是默认的连续0起始索引,会出现切片行数不符、内容错位的问题。 - 冗余无效代码:循环内的
n=0没有任何实际作用。
修正后可直接运行的代码
# 初始化切分用的源数据,用copy避免修改原始DataFrame df_count = df.copy() max_rows = 2000 dataframes = [] # 切分满2000行的块,用iloc按行位置切片,彻底规避索引问题 while len(df_count) > max_rows: top = df_count.iloc[:max_rows] dataframes.append(top) df_count = df_count.iloc[max_rows:] # 追加剩余不足2000行的分块,这里是原代码的核心笔误 dataframes.append(df_count) # 导出Excel逻辑 with pd.ExcelWriter(output_path + "\\" + "Emails_" + date + ".xlsx") as writer: for sheet_idx, frame in enumerate(dataframes): # 仅导出Email列 frame["Email"].to_excel(writer, sheet_name=f"DB{sheet_idx + 1}", index=False)
注意事项
- 不要省略
df_count = df.copy()这一步:直接赋值的话切片操作可能会触发pandas的视图共享,意外修改原始df的数据。 - 用f-string拼接sheet名比字符串拼接更简洁,也不会出现类型错误。
内容的提问来源于stack exchange,提问作者Berny
相关产品推荐
相关产品推荐

