向预加载pandas DataFrame追加行并自动生成递增LeaveID索引方法
实现方案
针对你的需求(LeaveID为DataFrame索引,新行索引为当前最后一行索引值+1),可通过以下两种成熟方法实现,无需手动固定索引值。
方法1:pd.concat合并(官方推荐长期维护写法)
这是已被弃用的df.append()的官方替代方案,长期兼容性最好:
# 计算新行对应的LeaveID,比最后一行索引大1 new_leave_id = df.index[-1] + 1 # 基于你预先定义的row字典构造带指定索引的单行临时DataFrame new_row_df = pd.DataFrame(row, index=[new_leave_id]) # 将临时行合并到原DataFrame df = pd.concat([df, new_row_df])
方法2:loc直接索引赋值(代码简洁、兼容性强)
兼容几乎所有pandas版本,代码量最少:
# 计算新行索引 new_leave_id = df.index[-1] + 1 # 直接给指定索引位置传入行数据 df.loc[new_leave_id] = row
关键注意点
- row字典的键必须和原DataFrame的列名完全一致,否则会触发列不存在的报错
- 两种方法都不会打乱原DataFrame的列顺序
- 不要使用已弃用的
df.append()写法:pandas 1.4.0以上版本调用该方法会触发弃用警告,后续大版本会彻底移除该接口 - 空表场景兼容:如果DataFrame可能存在无数据的空状态,计算新索引的语句可优化为
new_leave_id = 1 if df.empty else df.index[-1] + 1,避免空表时取最后一个索引触发越界报错
内容的提问来源于stack exchange,提问作者Kim Minseo
相关产品推荐
相关产品推荐

