Pandas数据清洗和常用函数

news2024/12/25 13:56:49

数据清洗

数据清洗是对一些没用的数据进行处理的过程。

当数据出现确实、数据格式错误、错误数据或重复数据的情况,如果我们想要分析的更加准确,就要对没用的数据进行处理。

此时我们学习采用菜鸟教程的数据作为案例,如下图所示。

在这里插入图片描述

在途中包含的错误数据有:

  • n/a
  • NA
  • na

清洗空值

使用 dropna() 方法,语法格式如下:

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

参数说明

  • axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列
  • how:默认为 ‘any’ 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how=‘all’ 一行(或列)都是 NA 才去掉这整行。
  • thresh:设置需要多少非空值的数据才可以保留下来的。
  • subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。
  • inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。

判断是否为空

通过 isnull() 判断各个单元格是否为空。

df = pd.read_csv('property-data.csv')
print (df['NUM_BEDROOMS'])
print (df['NUM_BEDROOMS'].isnull())

在这里插入图片描述

使用该方法,将 n/a 和 NA 当作空数据,na 不是空数据,这样与我们先前指定的目标是不一样的。

当然 Pandas 支持我们指定空类型。

missing_values = ["n/a", "na", "--"]
df = pd.read_csv('property-data.csv', na_values = missing_values)

print (df['NUM_BEDROOMS'])
print (df['NUM_BEDROOMS'].isnull())

在这里插入图片描述

删除空行

使用 dropna() 方法进行删除,在删除后返回一个新的 DataFrame 对象,不会修改源数据。

df = pd.read_csv('property-data.csv')
new_df = df.dropna()
print(new_df.to_string())

在这里插入图片描述

如果需要修改源数据,则将参数 inplace 设置为 True

df = pd.read_csv('property-data.csv')
df.dropna(inplace = True)
print(df.to_string())

移除指定列有空值的行

df = pd.read_csv('property-data.csv')
df.dropna(subset=['ST_NUM'], inplace = True)
print(df.to_string())

在这里插入图片描述

替换空字段

使用 fillna() 方法替换空字段

df = pd.read_csv('property-data.csv')
# 替换空串
df.fillna(12345, inplace = True)
print(df.to_string())

在这里插入图片描述

在日常操作中,替换空单元格是常见的行为,直接替换为指定值在大多数情况下都不合适。

替换空单元格的常用方法是计算列的均值、中位数值或众数。

Pandas使用 mean()median()mode() 方法计算列的均值(所有值加起来的平均值)、中位数值(排序后排在中间的数)和众数(出现频率最高的数)。

df = pd.read_csv('property-data.csv')
# 读取均值
x = df["ST_NUM"].mean()
df["ST_NUM"].fillna(x, inplace = True)
print(df.to_string())

清洗数据错误

数据错误也是经常出现的情况,我们可以对错误的数据进行替换或者移除。

修改错误数据

修改错误数据,直接指定坐标即可,如下修改不正确的年龄。

person = {
    "name": ['Google', 'Runoob', 'Taobao'],
    "age": [50, 40, 12345]  # 12345 年龄数据是错误的
}
df = pd.DataFrame(person)
for idx in df.index:
    if df.loc[idx, 'age'] > 100 or df.loc[idx, 'age'] < 0:
        # 修改数据
        df.loc[idx, 'age'] = 30
print(df.to_string())

也可以直接删除行

person = {
    "name": ['Google', 'Runoob', 'Taobao'],
    "age": [50, 40, 12345]  # 12345 年龄数据是错误的
}
df = pd.DataFrame(person)
for idx in df.index:
    if df.loc[idx, 'age'] > 100 or df.loc[idx, 'age'] < 0:
        df.drop(idx,inplace = True)
print(df.to_string())

清洗重复数据

Pandas 清洗重复数据,使用 duplicated() 和 drop_duplicates() 方法

如果对应的数据是数据是重复的,duplicated() 会返回 True ,否则返回 False。

person = {
  "name": ['Google', 'Runoob', 'Runoob', 'Taobao'],
  "age": [50, 40, 40, 23]  
}
df = pd.DataFrame(person)

print(df.duplicated())

在这里插入图片描述

删除重复数据,采用 drop_duplicates() 方法。

persons = {
  "name": ['Google', 'Runoob', 'Runoob', 'Taobao'],
  "age": [50, 40, 40, 23]  
}
df = pd.DataFrame(persons)
df.drop_duplicates(inplace = True)
print(df)

在这里插入图片描述

常用函数

读取数据

函数说明
pd.read_csv(filename)读取 CSV 文件;
pd.read_excel(filename)读取 Excel 文件;
pd.read_sql(query, connection_object)从 SQL 数据库读取数据;
pd.read_json(json_string)从 JSON 字符串中读取数据;
pd.read_html(url)从 HTML 页面中读取数据。

查看数据

函数说明
df.head(n)显示前 n 行数据;
df.tail(n)显示后 n 行数据;
df.info()显示数据的信息,包括列名、数据类型、缺失值等;
df.describe()显示数据的基本统计信息,包括均值、方差、最大值、最小值等;
df.shape显示数据的行数和列数。

数据清洗

函数说明
df.fillna(value)将缺失值替换为指定的值;
df.replace(old_value, new_value)将指定值替换为新值;
df.duplicated()检查是否有重复的数据;
df.drop_duplicates()删除重复的数据。
df.dropna()删除包含缺失值的行或列;

数据选择和切片

函数说明
df[column_name]选择指定的列;
df.loc[row_index, column_name]通过标签选择数据;
df.iloc[row_index, column_index]通过位置选择数据;
df.ix[row_index, column_name]通过标签或位置选择数据;
df.filter(items=[column_name1, column_name2])选择指定的列;
df.filter(regex=‘regex’)选择列名匹配正则表达式的列;
df.sample(n)随机选择 n 行数据。

数据排序

函数说明
df.sort_values(column_name)按照指定列的值排序;
df.sort_values([column_name1, column_name2], ascending=[True, False])按照多个列的值排序;
df.sort_index()按照索引排序。

数据分组和聚合

函数说明
df.groupby(column_name)按照指定列进行分组;
df.aggregate(function_name)对分组后的数据进行聚合操作;
df.pivot_table(values, index, columns, aggfunc)生成透视表。

数据合并

函数说明
pd.concat([df1, df2])将多个数据框按照行或列进行合并;
pd.merge(df1, df2, on=column_name)按照指定列将两个数据框进行合并。

数据选择和过滤

函数说明
df.loc[row_indexer, column_indexer]按标签选择行和列。
df.iloc[row_indexer, column_indexer]按位置选择行和列。
df[df[‘column_name’] > value]选择列中满足条件的行。
df.query(‘column_name > value’)使用字符串表达式选择列中满足条件的行。

数据统计和描述

函数说明
df.describe()计算基本统计信息,如均值、标准差、最小值、最大值等。
df.mean()计算每列的平均值。
df.median()计算每列的中位数。
df.mode()计算每列的众数。
df.count()计算每列非缺失值的数量。

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

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

相关文章

IDEA常用插件之依赖关系查看Maven Helper

文章目录 安装使用 安装 使用 安装完成后点击pom.xml文件&#xff0c;可以查看Maven依赖关系

Linux下jenkins全量迁移到新服务器

文章目录 1、目的2、迁移1&#xff09;查看jenkins的主目录2&#xff09;登录要迁出的服务器打包3&#xff09;找到对应的war包4&#xff09;登录对应迁入服务&#xff0c;上传war包和打包的jenkins数据等5&#xff09;在新的服务器解压迁入的数据等&#xff0c;并查看端口是否…

新生录取信息收集

随着高等教育的普及&#xff0c;每年都有大量的学生被大学录取。对于学校来说&#xff0c;新生录取确认和信息收集是一项重要的工作&#xff0c;但也是一项繁琐而耗时的任务。然而&#xff0c;通过合理的规划和利用现代科技手段&#xff0c;我们可以轻松搞定这一工作&#xff0…

代码随想录第28天|93. 复原 IP 地址,78.子集, 90.子集II

93. 复原 IP 地址 回溯三部曲 1.递归参数&#xff1a;startIndex一定是需要的&#xff0c;因为不能重复分割&#xff0c;记录下一层递归分割的起始位置 2.递归终止条件 终止条件和131.分割回文串 (opens new window)情况就不同了&#xff0c;本题明确要求只会分成4段&#x…

系统安全——SpringBoot配置文件加密

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;SpringBoot、配置文件、明文加密☀️每日 一言&#xff1a;自己动手丰衣足食~ 一、前言 在日常开发中&#xff0c;项目中会有很多配置文件。比如SpringBoot项目核心的数据库配置、Redis账号密码…

Java基于SpringBoot+Vue实现酒店客房管理系统(2.0 版本)

文章目录 一、前言介绍二、系统结构三、系统详细实现3.1用户信息管理3.2会员信息管理3.3客房信息管理3.4收藏客房管理3.5用户入住管理3.6客房清扫管理 四、部分核心代码 博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云…

openGauss学习笔记-48 openGauss 高级数据管理-函数

文章目录 openGauss学习笔记-48 openGauss 高级数据管理-函数48.1 数学函数48.2 三角函数列表48.3 字符串函数和操作符48.4 类型转换相关函数 openGauss学习笔记-48 openGauss 高级数据管理-函数 openGauss常用的函数如下&#xff1a; 48.1 数学函数 abs(x) 描述&#xff1a;…

网络安全—黑客技术(自学笔记)

一、网络安全应该怎么学&#xff1f; 1.计算机基础需要过关 这一步跟网安关系暂时不大&#xff0c;是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通&#xff0c;可以与学习其他课程同步进行。 2.渗透技…

百度23Q2财报最新发布:营收利润加速增长,AI+生态战略渐显规模

百度集团-SW(9888.HK)Q2财报已于2023/08/22(美东)盘前发布&#xff0c;二季度百度集团整体收入实现341亿元&#xff0c;同比增长15%;归属百度的净利润(non-GAAP)达到80亿元&#xff0c;同比增长44%。营收和利润双双实现大幅增长&#xff0c;超市场预期。其中&#xff0c;百度核…

【Linux操作系统】Linux中的信号回收:管理子进程的关键步骤

在Linux中&#xff0c;我们可以通过捕获SIGCHLD信号来实现对子进程的回收。当一个子进程终止时&#xff0c;内核会向其父进程发送SIGCHLD信号。父进程可以通过注册信号处理函数&#xff0c;并在处理函数中调用wait()或waitpid()函数来回收已终止的子进程。 文章目录 借助信号捕…

stm32之3.key开关

假设key电阻为40kΩ&#xff0c;则key0 的电压3.3v*4/52.64v 2.key开关代码 ② GPIO_OType_PP//推挽输出 GPIO_OType_PP//开漏输出 推挽输出是指输出端口可以同时提供高电平和低电平输出&#xff0c;而开漏输出则是指输出端口只能提供低电平输出&#xff0c;高电平时需要借…

Java加载ICC文件的方法总结

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

C语言实现:从RSA PEM文件中提取私钥n/e/d/p/q/dp/dq/qp因子

我们知道使用openssl命令行openssl rsa -in test_priv.pem -text 即可实现从私钥PEM文件中提取私钥因子&#xff1a;n/e/d/p/q/dp/dq/qp. 那么如何用C语言实现呢&#xff1f;如何在代码中实现呢&#xff1f; #include <stdio.h> #include <stdlib.h> #include &l…

湖北黄石三维扫描文物保护修复文物建模3d打印-CASAIM中科广电

三维激光扫描技术在博物馆领域的运用&#xff0c;主要在以下3个方面&#xff1a;文物保护、文物数字化、虚拟博物馆。随着时间的流逝和人类活动的影响&#xff0c;文物不可避免地会受到来自自然或者人为的侵蚀和破坏。由于CASAIM三维激光扫描技术具有不用接触被测量目标、扫描速…

基于微信小程序的物流管理系统3txar

在此基础上&#xff0c;结合现有物流管理体系的特点&#xff0c;运用新技术&#xff0c;构建了以 springboot为基础的物流信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;对目前传统物流管理基础业务进行了较为详尽的了解和分析。根据需求分析结果进行了系统的设计&…

SpringBoot简单入门

星光下的赶路人star的个人主页 充满希望的旅途&#xff0c;胜过终点的到达 文章目录 1、Spring简介2、SpringBoot简介 3、SpringBoot下的配置文件4、HelloWorld4.1 工程搭建4.2 编写访问页面4.3 编写后台程序处理请求4.4 测试 5、Web基础常识5.1 Web请求三要素5.2 常见的html标…

IDEA常用插件之代码规范检查

Alibaba Java Coding Guidelines 安装 使用 手动扫描 这里扫描可以扫描某一个类、某一个包、整个项目都支持 扫描结果 实时扫描 开启实时扫描在代码编写过程中也会实时提醒

蓝牙耳机语音信号处理之ENC算法

+他V hezkz17进数字音频系统研究开发交流答疑群(课题组) 1 什么是单麦谱减法降噪? 单麦谱减法降噪是一种音频信号处理技术,用于在单声道录音中减少噪音的方法。它基于频域分析和减法混叠原理。首先,通过将音频信号转换为频域表示(如快速傅立叶变换),可以将音频信号分解…

基于微信小程序+Springboot校园二手商城系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、目前专注于大学生项目实战开发,讲解,毕业答疑辅导✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3…

C#_委托详解

委托是什么&#xff1f; 字面理解&#xff1a;例如A要建一栋别墅&#xff0c;找到B建筑施工队&#xff0c;请B来建筑别墅。 委托类型规定方法的签名&#xff08;方法类型&#xff09;&#xff1a;返回值类型、参数类型、个数、顺序。 委托变量可以用来存储方法的引用&#x…