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)
最终效果
运行后得到的结果符合要求:
| Id | Name |
|---|---|
| 0 | Alpha |
| 1 | Beta |
| 2 | Gamma |
| 3 | Delta |
| 4 | Epsilon |
| 5 | Zeta |
内容的提问来源于stack exchange,提问作者Joo
相关产品推荐
相关产品推荐

