Pandas使用loc添加行时覆盖已有行的问题及解决方案咨询
解决方案
方法1:重置索引(适合需要连续索引的场景)
先把现有索引重置为连续整数,这样后续用loc[len(data)]就能安全新增行,不会覆盖已有数据:
# 重置索引,丢弃原索引 data = data.reset_index(drop=True) # 新增行 data.loc[len(data)] = ["list"]
方法2:基于最大索引新增(保留原索引)
如果不想修改现有索引,直接找到当前最大的loc索引,加1后作为新行的索引即可:
max_idx = data.index.max() data.loc[max_idx + 1] = ["list"]
方法3:用pd.concat高效新增(大数据集首选)
append效率低是因为每次都会创建新的DataFrame,换成pd.concat性能更优,单条或批量新增都适用:
import pandas as pd # 构造新行的DataFrame,需与原数据列数、列名匹配 new_row = pd.DataFrame([["list"]], columns=data.columns) # 合并原数据和新行,设置ignore_index=True可重置为连续索引 data = pd.concat([data, new_row], ignore_index=False)
关键错误修正
你原代码里data = data.drop(1703,inplace=True)存在问题:inplace=True时drop方法会返回None,导致data变成空对象,后续操作必然报错。正确写法二选一:
# 方式1:不使用inplace,重新赋值 data = data.drop(1703) # 方式2:使用inplace,无需赋值 data.drop(1703, inplace=True)
内容的提问来源于stack exchange,提问作者Safiqur Rahman
相关产品推荐
相关产品推荐

