千家信息网

利用pandas进行数据清洗的方法是怎样的

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章将为大家详细讲解有关利用pandas进行数据清洗的方法是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。我们有下面的一个数据,利用其做简单
千家信息网最后更新 2025年01月20日利用pandas进行数据清洗的方法是怎样的

这篇文章将为大家详细讲解有关利用pandas进行数据清洗的方法是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

我们有下面的一个数据,利用其做简单的数据分析。


这是一家服装店统计的会员数据。最上面的一行是列坐标,最左侧一列是行坐标。列坐标中,第 0 列代表的是序号,第 1 列代表的会员的姓名,第 2 列代表年龄,第 3 列代表体重,第 4~6 列代表男性会员的三围尺寸,第 7~9 列代表女性会员的三围尺寸。

数据清洗规则总结为以下 4 个关键点,统一起来叫"完全合一",下面来解释下:

  • 完整性:单条数据是否存在空值,统计的字段是否完善。

  • 全面性:观察某一列的全部数值,比如在 Excel 表中,我们选中一列,可以看到该列的平均值、最大值、最小值。我们可以通过常识来判断该列是否有问题,比如:数据定义、单位标识、数值本身。

  • 合法性:数据的类型、内容、大小的合法性。比如数据中存在非 ASCII 字符,性别存在了未知,年龄超过了 150 岁等。

  • 唯一性:数据是否存在重复记录,因为数据通常来自不同渠道的汇总,重复的情况是常见的。行数据、列数据都需要是唯一的,比如一个人不能重复记录多次,且一个人的体重也不能在列指标中重复记录多次。

1、完整性

1.1 缺失值

一般情况下,由于数据量巨大,在采集数据的过程中,会出现有些数据单元没有被采集到,也就是数据存在缺失。通常面对这种情况,我们可以采用以下三种方法:

  • 删除:删除数据缺失的记录

  • 均值:使用当前列的均值填充

  • 高频:使用当前列出现频率最高的数据

比如我们相对data['Age']中缺失的数值使用平均年龄进行填充,可以写:

df['Age'].fillna(df['Age'].mean(), inplace=True)

如果我们用最高频的数据进行填充,可以先通过 value_counts 获取 Age 字段最高频次 age_maxf,然后再对 Age 字段中缺失的数据用 age_maxf 进行填充:

age_maxf = train_features['Age'].value_counts().index[0]train_features['Age'].fillna(age_maxf, inplace=True)

1.2 空行

我们发现数据中有一个空行,除了 index 之外,全部的值都是 NaN。Pandas 的 read_csv() 并没有可选参数来忽略空行,这样,我们就需要在数据被读入之后再使用 dropna() 进行处理,删除空行。

# 删除全空的行df.dropna(how='all',inplace=True)

2、全面性

列数据的单位不统一

如果某一列数据其单位并不统一,比如weight列,有的单位为千克(Kgs),有的单位是磅(Lbs)。
这里我们使用千克作为统一的度量单位,将磅转化为千克:

# 获取 weight 数据列中单位为 lbs 的数据rows_with_lbs = df['weight'].str.contains('lbs').fillna(False)print df[rows_with_lbs]# 将 lbs转换为 kgs, 2.2lbs=1kgsfor i,lbs_row in df[rows_with_lbs].iterrows():  # 截取从头开始到倒数第三个字符之前,即去掉lbs。  weight = int(float(lbs_row['weight'][:-3])/2.2)  df.at[i,'weight'] = '{}kgs'.format(weight)

3、合理性

非ASCII字符

假设在数据集中 Firstname 和 Lastname 有一些非 ASCII 的字符。我们可以采用删除或者替换的方式来解决非 ASCII 问题,这里我们使用删除方法,也就是用replace方法:

# 删除非 ASCII 字符df['first_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)df['last_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)

4、唯一性

4.1 一列有多个参数

假设姓名(Name)包含了两个参数 Firstname和Lastname。为了达到数据整洁的目的,我们将 Name 列拆分成 Firstname 和 Lastname 两个字段。我们使用 Python 的 split 方法,str.split(expand=True),将列表拆成新的列,再将原来的 Name 列删除。

# 切分名字,删除源数据列df[['first_name','last_name']] = df['name'].str.split(expand=True)df.drop('name', axis=1, inplace=True)

4.2 重复数据

我们校验一下数据中是否存在重复记录。如果存在重复记录,就使用 Pandas 提供的 drop_duplicates() 来删除重复数据。

# 删除重复数据行df.drop_duplicates(['first_name','last_name'],inplace=True)

这样,我们就将上面案例中中的会员数据进行了清理,来看看清理之后的数据结果。

关于利用pandas进行数据清洗的方法是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

数据 单位 方法 代表 会员 字符 缺失 字段 空行 统一 清洗 内容 参数 坐标 年龄 情况 数值 合法 最高 三围 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东mes软件开发商 银行从业人员如何网络安全 软件开发和设计是什么行业的 微服务的数据库表数量 思维网络技术有限公司 潮汕苹果软件开发怎么样 网络技术专业研究生院校排名 黄浦区网络技术开发服务 育创网络技术研发部总监 一个机架大概有多少服务器 软件开发算内勤吗 g6财务管理系统配置服务器 永济小程序软件开发公司 美国集群服务器 惠州app软件开发机构 为什么qq会显示数据库读取异常 21位数据库 来宾二中老师网络安全课 绝地求生未来之役去哪个服务器 济南京座网络技术有限公司 什么是网络安全三个责任人 我的世界网易pc版龙珠服务器 软件开发和设计是什么行业的 漯河中等计算机网络技术 软件开发什么时候好找工作 网络安全工程师知名人物 国内网络安全产品市场分析 视频服务器存储大小 php 服务数据库 地址 sas临时数据库是唯一的吗
0