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

如何用Pandas检测CSV缺失DOB/Gender并导出指定字段?

CSV重复行检测与缺失值筛选导出方案

原代码存在的问题

  • 重复行筛选代码缺失闭合括号,导致语法错误
  • 缺失值检测逻辑错误:错误使用fillna('')转换布尔序列,且通过全局if判断整列的方式不符合逐行筛选需求
  • 未正确提取需要导出的指定字段,导致导出内容不符合预期

修正后的完整代码

import pandas as pd

# 读取无列标题的CSV文件
df = pd.read_csv('data.csv', engine='python', header=None)

# 为数据添加列标题
df.columns = ["EmpID","SSN", "Status", "LastName", "FirstName", "Middle", "DOB", "Address1", "Address2", "City", "State", "Zip", "Phone", "Email", "Gender"]

# 筛选所有重复行(基于EmpID、SSN、DOB三个字段)
df0 = df[df[["EmpID", "SSN", "DOB"]].duplicated(keep=False)]

# 筛选DOB缺失的行,仅保留指定字段
df1 = df[df["DOB"].isna()][["EmpID", "SSN", "LastName", "FirstName", "DOB"]]

# 筛选Gender缺失的行,仅保留指定字段
df2 = df[df["Gender"].isna()][["EmpID", "SSN", "LastName", "FirstName", "Gender"]]

# 将三个结果导出到Excel的不同工作表
with pd.ExcelWriter('output.xlsx') as writer:
    df0.to_excel(writer, sheet_name='Duplicates', index=False)
    df1.to_excel(writer, sheet_name='Missing DOB', index=False)
    df2.to_excel(writer, sheet_name='Missing Gender', index=False)

关键修正说明

  1. 读取CSV时指定header=None:明确告诉pandas原文件没有列标题,避免把第一行数据误判为表头
  2. 重复行筛选优化:使用duplicated(keep=False)保留所有重复的行(默认keep='first'仅标记后续重复行),同时修复了原代码的语法错误
  3. 缺失值筛选逻辑:通过df["列名"].isna()生成布尔索引,直接筛选出对应列值缺失的行,再通过列索引提取需要导出的指定字段,得到符合要求的DataFrame
  4. 导出设置:添加index=False避免将pandas的默认索引列导出到Excel,使输出结果更整洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:00:20