客户异常数据清洗详细教程——pandas

前言

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

  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))] #只获取有重复的客户,减少需要处理的数据量
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 🎓💡🎯

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很好,以下是关于 pandas 预处理的答案: pandas 是一种基于 NumPy 的数据分析工具,提供了大量的函数和方法来处理数据。在数据分析中,预处理数据是非常重要的一步,pandas 提供了多种方法来进行数据预处理,包括数据清洗、缺失值处理、重复值处理、数据转换等。 1. 数据清洗 数据清洗是指对数据进行初步处理,去除不必要的信息和异常值。pandas 提供了多种方法来进行数据清洗,包括: - drop_duplicates:去除重复值。 - dropna:去除缺失值。 - replace:替换指定的值。 - fillna:填充缺失值。 - drop:删除指定的行或列。 2. 缺失值处理 缺失值是指数据中的某些值缺失或为空,pandas 提供了多种方法来处理缺失值,包括: - isnull:判断某个值是否为空。 - notnull:判断某个值是否不为空。 - dropna:删除包含缺失值的行或列。 - fillna:填充缺失值。 3. 重复值处理 重复值是指数据中的某些值出现了重复,pandas 提供了多种方法来处理重复值,包括: - duplicated:判断某个值是否出现过重复。 - drop_duplicates:删除重复值。 4. 数据转换 数据转换是指将数据转换成适合分析的格式或类型,pandas 提供了多种方法来进行数据转换,包括: - astype:将某列数据转换成指定的数据类型。 - apply:对某个列或行应用指定的函数。 - map:对某个列应用指定的映射关系。 - pivot_table:对数据进行透视操作。 以上就是 pandas 预处理的答案,希望对你有所帮助。如果还有其他问题,可以继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄昏中起飞的猫头鹰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值