pandas清洗客户编码异常数据

news2024/11/27 14:29:53

前言

在不同行业中,我们经常会遇到一个麻烦的问题:数据清洗。尤其是当我们需要处理客户编码异常数据时,这个问题变得尤为重要。想象一下,许多银行都是以客户为单位管理数据的,因此每个客户都有一个独特的编码。在处理这些数据时,我们常常会面临以下问题:

  1. 客户编码有一个为空,另一个不为空的情况。😕
  2. 客户编码存在多个不同的值。😮
  3. 客户编码为空。😔

针对这些令人头疼的问题,接下来我将详细介绍如何使用pandas清洗客户编码异常数据。🔍💻💡

创建一个新的数据集

首先我们要创建一个新的数据集,这个数据集的目的是用来对客户的编码进行清洗。

import pandas as pd
import numpy as np

data = {
    '主键': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'MDG编码': [np.nan, np.nan, 'A001', 'A002', np.nan, 'B001', 'B002', np.nan, 'C001', 'C002'],
    '客户名称': ['客户1', '客户1', '客户1', '客户2', '客户2', '客户3', '客户3', '客户4', '客户4', '客户4'],
    '证件号': ['111111', '111111', '111111', '222222', '222222', '333333', '333333', '444444', '444444', '444444'],
    '客户类型': ['类型1', '类型1', '类型1', '类型2', '类型2', '类型3', '类型3', '类型4', '类型4', '类型4']
}

yb = pd.DataFrame(data)
yb

输出
在这里插入图片描述

字符串空值转换

pandas识别空字符串为非空值,所以我们需要将编码为空的数据转换为pandas能识别的NaN。

yb.MDG编码.replace(to_replace=r'^\s*$', value=np.nan, regex=True, inplace=True)
cf = yb[(yb.duplicated(['客户名称'], keep=False)) & (yb.客户类型 != '类型1')] #只获取有重复的客户,减少需要处理的数据量
cf

输出:同上

构造分组函数、不同异常数据进行分组

cf['count'] = np.nan
cf.sort_values(by=['客户名称','MDG编码'],inplace=True)
def abc(x):
    df = set(x[x.notnull()])
    if len(df)==1:
        if len(set(x))>1:
            return 2
        else:
            return 1
    elif len(df)>=2:
        return 3
cf['count'] = cf.groupby(['客户名称'])['MDG编码'].transform(abc)
cf

输出
在这里插入图片描述

这段代码的作用是在DataFrame(cf)中创建一个新的列count,然后根据'客户名称''MDG编码'对DataFrame进行排序。接下来,定义了一个函数abc(x)

该函数首先将非空值存储在一个集合df中。如果集合df中的元素个数为1,且字段x中的不同值个数多于1个,则返回2。如果集合df中的元素个数为1,且字段x中的不同值个数只有1个,则返回1。如果集合df中的元素个数大于等于2,则返回3。

最后,使用cf.groupby(['客户名称'])['MDG编码'].transform(abc)将函数abc应用到分组后的cf DataFrame的'MDG编码'列中,并将结果赋值给cf'count'列。

查询正确的客户编码

#查询mdg编码正确的数据
cf2 = cf[cf['count']==2]
cf1 = cf2.loc[cf2.MDG编码.notnull()]
cf1 = cf1.drop_duplicates('客户名称')  #mdg编码不为空,且mdg编码正确的数据
cf1

输出
在这里插入图片描述

获取需要修改的异常客户的id

将mdg编码为空的客户 与 正确MDG编码的客户进行匹配,获取需要修改的客户数据

cf3 = cf2[cf2.MDG编码.isnull()].merge(cf1[['客户名称','MDG编码']],how='left',on='客户名称')
cf3 = cf3[['主键','MDG编码_y','客户名称','证件号','客户类型','MDG编码_x']]
cf3  #MDG编码_y为正确编码,主键为需要修改的id

输出
在这里插入图片描述
上述情况是相同客户有一个正确编码和一个编码为空的情况,对于相同客户有两个及两个以上不同编码的情况,使用下述方法查询:

cf[cf['count']==3] #多个不相等mdg编码

输出
在这里插入图片描述

这类数据由于编码有多个不相同,需要根据业务进一步核实

总结

本文主要介绍了在 pandas中清洗客户编码异常数据的方法,使用这个方法我们可以快速的清洗客户编码异常数据。那么如果你想要对这个方法进行优化的话,我们还可以对数据进行清洗。比如说我们可以对原始数据进行一次排序,然后在排序后的数据中寻找是否存在空值、重复值和重复编码等问题。

🚀💻 欢迎一起探索pandas的更多精彩博客!🌟
🔗1️⃣ Pandas特殊连接:模糊连接和有序变量表连接!
🔗2️⃣ pandas特征工程:线性变换
🔗3️⃣ Pandsa时间序列采样频率滑窗及重采样
🔗4️⃣ Pandas 日期处理:生成及去除工作日与节假日
🔗5️⃣ Python音频处理——pydub
🔗6️⃣Python使用XPath解析HTML:从入门到精通
🔗7️⃣Python天文数据处理——Astropy

一起来学习吧!😄🎉 #编程 #CSDN #Python #Pandas #Astropy #Pydub 🎓💡🎯

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/769765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LiveGBS流媒体平台GB/T28181功能-海康NVR摄像机自带物联网卡摄像头注册GB/T28181国标平台看不到设备的时候如何抓包及排查

海康大华宇视华为等硬件NVR摄像机注册到LiveGBS国标平台看不到设备的时候如何抓包及排查 1、设备注册后查看不到1.1、是否是自带物联网卡的摄像头1.2、关闭萤石云1.3、防火墙排查1.4、端口排查1.5、IP地址排查1.6、设备TCP/IP配置排查1.7、设备多网卡排查1.8、设备接入配置参数…

实战:ELK环境部署并采集springboot项目日志

文章目录 前言技术积累ELK组成及功能框架搭建基础 EIK环境搭建elasticsearch配置相关kibana配置相关logstash配置相关elk目录下增加docker-compose文件查看elk目录文件树编排elk springboot集成logstashpom.xmllogback-spring.xml启动项目logstash采集日志 写在最后 前言 相信…

Java8 stream toMap、groupingBy、mapping的综合应用

文章目录 一、stream toMap、groupingBy、mapping的综合应用1、前提准备①、实体类②、数据准备 2、核心代码:3、运行结果 一、stream toMap、groupingBy、mapping的综合应用 1、前提准备 ①、实体类 package com.cfay.demo;import lombok.AllArgsConstructor; i…

LCD拼接屏、LED显示屏和OLED显示屏的主要区别

我们在生活或工作中经常看到大大小小的显示屏,但很多人却分不清楚这些屏到底属于哪一类,今天sostron与大家一起来分享下关于:LCD拼接屏、LED显示屏、OLED透明屏三者的区别。 LCD拼接屏、LED显示屏和OLED显示屏是不同类型的显示技术&#xff0…

【116个】网络安全测试相关面试真题

1、Burpsuite常用的功能是什么? 2、reverse_tcp和bind_tcp的区别? 3、拿到一个待检测的站或给你一个网站,你觉得应该先做什么? 4、你在渗透测试过程中是如何敏感信息收集的? 5、你平时去哪些网站进行学习、挖漏洞提交到…

这样创建客户帮助中心,效果超好!

创建一个有效的客户帮助中心是为了为客户提供优质的支持和服务。在这个数字化时代,客户期望能够快速找到所需的信息,并得到准确和及时的解答。本文将分享创建有效客户帮助中心的最佳实践,帮助您提供出色的客户体验并提升客户满意度。 1. 了解…

Banana Pi M2 Zero 运行 openHAB 回顾

首先我要透露的是,BPI 的工作人员向我发送了一台免费的 BPi M2 Zero 来执行这些测试。我相信我的评论是公平和公正的,但我想坦率地说明这一事实。 硬件简介 与 Raspberry Pi Zero W 相比,Banana Pi BPI-M2 Zero 具有令人印象深刻的规格。以下…

git进阶操作

一、git 基础概念1. 1.1 三种状态: 工作区(unstage)——已修改(modified) 暂存区(stage)——已暂存(staged) 对象区——已提交(commited) 工作…

moment.js常见格式化处理各种时间方法

Moment.js 是一个简单易用的轻量级 JavaScript 日期处理类库,提供了日期格式化、日期解析等功能。它支持在浏览器和 NodeJS 两种环境中运行。此类库能够将给定的任意日期转换成多种不同的格式,具有强大的日期计算功能,同时也内置了能显示多样的日期形式的函数。另外,它也支…

博弈论--sg函数

sg函数------ 定义终止状态的SG函数值为0。如果游戏已经结束,即达到了终止状态,那么对应的SG函数值就是0。即先手的sg值为0,则先手必败,否则先手必胜。 如何求sg函数值--------对于每个可能的移动,将后续状态的SG函数…

「从零入门推荐系统」21:chatGPT、大模型介绍

作者 | gongyouliu 编辑 | gongyouliu 自2022年11月30日OpenAI发布chatGPT以来,大模型技术掀起了新一轮人工智能浪潮。chatGPT在各个领域(包括对话、摘要、内容生成、问题解答、识图、数学计算与推理、代码编写等)取得了比之前算法好得多的成…

测试开发之路 (工具篇)--Docker

目录 前言 什么是 docker 在 demo 中学习 mysql test link 更复杂点的场景 前言 Docker是一种开源的容器化平台,它可以帮助开发人员和测试人员更轻松地构建、部署和运行应用程序。在测试开发中,Docker可以提供许多便利和优势。 什么是 docker 官…

VMware Cloud Director 10.5 - 领先的云服务交付平台

VMware Cloud Director 10.5 - 领先的云服务交付平台 Support for vSphere 8.0U1 & NSX 4.1 请访问原文链接:https://sysin.org/blog/vmware-cloud-director-10/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.or…

【ShenYu系列】ShenYu的SPI实现源码分析

前言 前面我已经介绍【面试系列】详细拆解Java、Spring、Dubbo三者SPI机制的原理,当已经有了合适的实现,shenyu自身的SPI和上面的有啥区别,值得玩味。 什么是SPI SPI就是Service Provider Interface,直译"服务提供方接口&…

go+vue+wails写一个简单的密码加密器

git仓库 gitee: malred/password-generator-wails-vue gitee: malred/password-generator-wails-vue github: https://github.com/malred/password-generator-wails-vue wails是什么 我们用它来套壳前端项目(vue),打包成桌面端…

Java虚拟机——类加载机制概述 类加载的时机

在Class文件中描述的各类信息,最终都需要加载到虚拟机中之后才能被运行和使用。本章将会介绍虚拟机如何加载这些Class文件,Class文件中的信息进入到虚拟机后会发生什么变化。类加载机制:Java虚拟机把描述类的数据从Class文件加载到内存&#…

【ArcGIS】shp导入报错ORA-00911无效字符

这个当个问题记录以下,就是shp文件名或者字段名有非正常字符,修改下名称重新导入即可; 直接改shp没法修改字段,会报错,需要先转化为gdb文件,然后在修改

【Spring】Spring AOP入门及实现原理剖析

文章目录 1 初探Aop1.1 何为AOP?1.2 AOP的组成1.2.1 切面(Aspect)1.2.2 连接点(Join Point)1.2.3 切点(Pointcut)1.2.4 通知(Advice) 1.3 AOP的使用场景 2 Spring AOP入门2.1 添加 Spring AOP 框架⽀持2.2 定义切面和切点2.3 定义相关通知 3 Spring AOP实现原理3.1 …

tauri自定义窗口window并实现拖拽和阴影效果

需求说明 由于官方提供的窗口标题并不能实现我的需求,不能很好的实现主题切换的功能,所以根据官方文档实现了一个自定义的窗口,官方文档地址:Window Customization | Tauri Apps 但是实现之后, 没有了窗体拖拽移动的…

linux系统编程-进程

目录 1 程序和进程 1.1 并发 1.3 多道程序设计 1.4 CPU 和 MMU 1.5 进程控制块 PCB 1.6 进程状态 1.7 环境变量 1.8 setenv 函数 2. 进程控制 2.1 fork 函数 2.2 循环创建 n 个子进程 2.3getpid 函数 2.4 getppid 函数 2.5 getuid 函数 2.6 getgid 函数 2.7 进…