如何用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)
关键修正说明
- 读取CSV时指定
header=None:明确告诉pandas原文件没有列标题,避免把第一行数据误判为表头 - 重复行筛选优化:使用
duplicated(keep=False)保留所有重复的行(默认keep='first'仅标记后续重复行),同时修复了原代码的语法错误 - 缺失值筛选逻辑:通过
df["列名"].isna()生成布尔索引,直接筛选出对应列值缺失的行,再通过列索引提取需要导出的指定字段,得到符合要求的DataFrame - 导出设置:添加
index=False避免将pandas的默认索引列导出到Excel,使输出结果更整洁
内容的提问来源于stack exchange,提问作者db18145
相关产品推荐
相关产品推荐

