如何为pandas分块读取生成的多个DataFrame设置全局连续序号
解决方案
你现有代码存在两个核心问题:
- 赋值操作误用了比较运算符
==,不会实际给列写入值 - 每个分块的DataFrame索引为独立的从0开始的序列,没有累加之前分块的总长度
实现代码
你只需要额外维护一个全局偏移量变量,记录之前所有分块的总行数,每次给当前分块的seqnum赋值时叠加该偏移量即可,完整代码如下:
import pandas as pd # 初始化全局偏移量,记录已处理的总行数 global_offset = 0 chunksize = 1000 for df_small in pd.read_csv("largefile.txt", chunksize=chunksize, iterator=True, low_memory=False): # 给当前分块生成全局连续的seqnum df_small['seqnum'] = df_small.index + global_offset # 此处可追加对当前分块的其他处理逻辑 # 更新偏移量,累加当前分块的实际行数 global_offset += len(df_small)
说明
- 该方案兼容最后一个分块不足
chunksize的场景,不需要手动计算分块次数,通过len(df_small)动态获取当前分块的实际行数更新偏移量,不会出现序号断层或者重复的问题 - 如果后续需要调整分块大小,只需要修改
chunksize变量的取值即可,其余逻辑不需要改动
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

