Python数据清洗之csv Reader lookup匹配缺失列
Posted ShenLiang2025
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据清洗之csv Reader lookup匹配缺失列相关的知识,希望对你有一定的参考价值。
Python通过csv Reader 缺失列匹配
需求概述
借助Python的CSV通过reader方法实现便利,并通过循环匹配在另外个csv里找到当前CSV字段的中文注释,匹配的不到的显示为”未知”。
数据描述
1 emp员工表的csv文件的内容
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ALIAS
7369 SMITH CLERK 7902 1980-12-27 800 20 sm
7499 ALLEN SALESMAN 7698 1981-2-20 1600 300 30 al
2 empcom 员工注释表csv里文件的内容
name label
EMPNO 雇员的编号,由四位数字所组成
ENAME 雇员的姓名,由10位字符所组成
JOB 雇员的职位
MGR 雇员对应的领导编号,领导也是雇员
HIREDATE 雇员的雇佣日期
SAL 基本工资,其中有两位小数,五倍整数,一共是七位
COMM 奖金,佣金
DEPTNO 雇员所在的部门编号
GEDER 性别
LEVEL 级别
3 补注:
1 emp.csv里的ALIAS字段不在empcom.csv里
2 empcom.csv里的GENDER、LEVEL也不在emp.csv里
代码实现
#通过csv里的reader结合list循环实现两个CSV的列名匹配。
def collookup2():
# 通过Reader加载emp.csv,此时EMPNO、ENAME、JOB对于第一行
empfile = reader(open('./data/emp.csv', 'rt', encoding='utf8'), delimiter='\\t')
empcomfile = reader(open('./data/empcom.csv', 'rt', encoding='utf8'), delimiter='\\t')
empdata = [d for d in empfile]
#遍历每一行,当前每一行的list对应2个元素即"name"和"label"
empcomdata = [d for d in empcomfile]
#定义个list接收在empcom.csv里而不在emp.csv的"name"(字段)
bad_rows=[]
'''#双层循环不能找到匹配和不匹配的列名
for i in empdata[0]:
for j in empcomdata:
if i in j:
print('match',i,j)
'''
#通过对empcom.csv逐行遍历,取empcomcol[0]即取name列。empdata[0]对应emp.csv的第一行。
for empcomcol in empcomdata:
if empcomcol[0] not in empdata[0]:
bad_rows.append(empcomcol)
#print(bad_rows)
#遍历bad_rows从empcomdata里删除不匹配emp.csv的列名
for h in bad_rows:
empcomdata.remove(h)
#print(empcomdata)
#对匹配empdata[0]的empcomdata[0]再次遍历,此时仅关注name列。
all_col = [h[0] for h in empcomdata]
#如果empdata[0]不在empcomdata[0]里就记住"未知"
miss_empcom=[]
for i in empdata[0]:
if i not in all_col:
miss_empcom.append(i)
miss_empcom.append('未知')
print(miss_empcom)
#追加"未知"的数据和都能匹配上的数据
empcomdata.append(miss_empcom)
return empcomdata
if __name__ == '__main__':
print(collookup2())
执行结果
[['EMPNO', '雇员的编号,由四位数字所组成'], ['ENAME', '雇员的姓名,由10位字符所组成'], ['JOB', '雇员的职位'], ['MGR', '雇员对应的领导编号,领导也是雇员'], ['HIREDATE', '雇员的雇佣日期'], ['SAL', '基本工资,其中有两位小数,五倍整数,一共是七位'], ['COMM', '奖金,佣金'], ['DEPTNO', '雇员所在的部门编号'], ['ALIAS', '未知']]
注:这里每个list里元素是只有2元素的list。
以上是关于Python数据清洗之csv Reader lookup匹配缺失列的主要内容,如果未能解决你的问题,请参考以下文章
从 csv.reader 之后的列(Python Pandas)中获取最早的日期