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

Pandas合并两个CSV数据帧去重及读取CSV出现NaN值问题求解

问题解决方法

第一步:修复csv1读取异常

你遇到的csv1读取后id列全为NaN的问题,是因为每行末尾多余的逗号导致pandas错误识别列数、把数值列当成了索引。读取时指定仅提取id列即可修复:

# 读取csv1时仅保留有效id列,自动忽略末尾逗号产生的空列
df1 = pd.read_csv('./csv1.csv', usecols=['id'])
# 可以执行下面的代码验证读取结果,确认id列没有NaN
# print(df1['id'].isna().sum())

第二步:提取两个文件的独有数值

这里提供两种实现方案,你可以根据需求选择:

方案1:集合运算(适合仅需获取独有值列表的场景,代码简洁效率高)

import pandas as pd

# 读取两个文件
df1 = pd.read_csv('./csv1.csv', usecols=['id'])
df2 = pd.read_csv('./csv2.csv', usecols=['IDNumber'])

# 转为集合自动去重
set1 = set(df1['id'].dropna())
set2 = set(df2['IDNumber'].dropna())

# csv1独有的值
csv1_unique = set1 - set2
# csv2独有的值
csv2_unique = set2 - set1

# 若需要导出为csv可使用以下代码
# pd.DataFrame({'id': list(csv1_unique)}).to_csv('csv1独有值.csv', index=False)
# pd.DataFrame({'IDNumber': list(csv2_unique)}).to_csv('csv2独有值.csv', index=False)

方案2:pandas原生方法(适合需要保留DataFrame结构、后续还要做其他数据处理的场景)

import pandas as pd

# 读取两个文件
df1 = pd.read_csv('./csv1.csv', usecols=['id'])
df2 = pd.read_csv('./csv2.csv', usecols=['IDNumber'])

# 提取csv1独有的行(排除两个文件共有的值)
df1_unique = df1[~df1['id'].isin(df2['IDNumber'])].drop_duplicates()
# 提取csv2独有的行
df2_unique = df2[~df2['IDNumber'].isin(df1['id'])].drop_duplicates()

原代码错误原因说明

你之前使用pd.concat时传入的是一个单列Series和一个DataFrame,默认按列拼接后会生成两个不同列名的列,重复值分属不同列,按行去重的drop_duplicates自然无法识别。不需要用拼接的方式实现需求,直接用集合运算或isin筛选即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:09:05