You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现CSV新增无重复行并解决ID列NaN问题

问题原因分析

你这段代码出现Id列NaN的核心问题是读取CSV时把Id设成了索引:

  • 用index_col='Id'读取后,Id不再是DataFrame的普通列,而是行索引。
  • 后续append时手动添加的Id列只在新增行有值,原来的旧行因为没有这个列,自然显示NaN。
  • 另外循环append的方式不仅效率低,还容易引发数据结构混乱,pandas不推荐这么用。
修正后的解决方案

直接用concat合并数据,全程保持Id为普通列,最后统一处理去重和Id递增:

import pandas as pd

items = ["Epsilon", "Beta", "Zeta"]

# 1. 读取原文件,不把Id设为索引,保留成普通列
df_original = pd.read_csv('original.csv')

# 2. 生成新增数据的DataFrame,Id从原数据的最大Id+1开始递推
max_original_id = df_original['Id'].max()
df_new = pd.DataFrame({
    'Id': range(max_original_id + 1, max_original_id + 1 + len(items)),
    'Name': items
})

# 3. 合并原数据和新增数据
df_combined = pd.concat([df_original, df_new], ignore_index=True)

# 4. 按Name去重,保留第一次出现的记录(原有的Beta会被保留,新增的重复Beta被删除)
df_final = df_combined.drop_duplicates(subset='Name', keep='first')

# 5. 重新生成连续递增的Id(去重后可能出现断号,用索引重置Id)
df_final = df_final.reset_index(drop=True)
df_final['Id'] = df_final.index

# 输出结果并保存
print(df_final)
df_final.to_csv('updated.csv', index=False)
最终效果

运行后得到的结果符合要求:

IdName
0Alpha
1Beta
2Gamma
3Delta
4Epsilon
5Zeta

内容的提问来源于stack exchange,提问作者Joo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:27:25