使用Pandas进行数据清理的入门示例

数据清理是数据分析过程中的关键步骤,它涉及识别缺失值、重复行、异常值和不正确的数据类型。获得干净可靠的数据对于准确的分析和建模非常重要。

本文将介绍以下6个经常使用的数据清理操作:

检查缺失值、检查重复行、处理离群值、检查所有列的数据类型、删除不必要的列、数据不一致处理

第一步,让我们导入库和数据集。

 # Import librariesimport pandas as pd# Read data from a CSV filedf = pd.read_csv('filename.csv')

检查缺失值

isnull()

方法可以用于查看数据框或列中的缺失值。

 # Check for missing values in the dataframedf.isnull()# Check the number of missing values in the dataframedf.isnull().sum().sort_values(ascending=False)

 # Check for missing values in the 'Customer Zipcode' columndf['Customer Zipcode'].isnull().sum()# Check what percentage of the data frame these 3 missing values ••representprint(f"3 missing values represents {(df['Customer Zipcode'].isnull().sum() / df.shape[0] * 100).round(4)}% of the rows in our DataFrame.")

Zipcode列中有3个缺失值

dropna()

可以删除包含至少一个缺失值的任何行或列。

 # Drop all the rows where at least one element is missingdf = df.dropna()    # or df.dropna(axis=0) **(axis=0 for rows and axis=1 for columns)# Note: inplace=True modifies the DataFrame rather than creating a new onedf.dropna(inplace=True)# Drop all the columns where at least one element is missingdf.dropna(axis=1, inplace=True)# Drop rows with missing values in specific columnsdf.dropna(subset = ['Additional Order items', 'Customer Zipcode'], inplace=True)
fillna()

也可以用更合适的值替换缺失的值,例如平均值、中位数或自定义值。

 # Fill missing values in the dataset with a specific valuedf = df.fillna(0)# Replace missing values in the dataset with mediandf = df.fillna(df.median())# Replace missing values in Order Quantity column with the mean of Order Quantitiesdf['Order Quantity'].fillna(df["Order Quantity"].mean, inplace=True)

检查重复行

duplicate()

方法可以查看重复的行。

 # Check duplicate rowsdf.duplicated()# Check the number of duplicate rowsdf.duplicated().sum()
drop_duplates()

可以使用这个方法删除重复的行。

 # Drop duplicate rows (but only keep the first row)df = df.drop_duplicates(keep='first') #keep='first' / keep='last' / keep=False# Note: inplace=True modifies the DataFrame rather than creating a new onedf.drop_duplicates(keep='first', inplace=True)

处理离群值

异常值是可以显著影响分析的极端值。可以通过删除它们或将它们转换为更合适的值来处理它们。

describe()

的maximum和mean之类的信息可以帮助我们查找离群值。

 # Get a statistics summary of the datasetdf["Product Price"].describe()

max”值:1999。其他数值都不接近1999年,而平均值是146,所以可以确定1999是一个离群值,需要处理

或者还可以绘制直方图查看数据的分布。

 plt.figure(figsize=(8, 6))df["Product Price"].hist(bins=100)

在直方图中,可以看到大部分的价格数据都在0到500之间。

箱线图在检测异常值时也很有用。

 plt.figure(figsize=(6, 4))df.boxplot(column=['Product Price'])

可以看到价格列有多个离群值数据点。(高于400的值)

检查列的数据类型

info()

可以查看数据集中列的数据类型。

 # Provide a summary of datasetdf.info()

to_datetime()

方法将列转换为日期时间数据类型。

 # Convert data type of Order Date column to datedf["Order Date"] = pd.to_datetime(df["Order Date"])
to_numeric()

可以将列转换为数字数据类型(例如,整数或浮点数)。

 # Convert data type of Order Quantity column to numeric data typedf["Order Quantity"] = pd.to_numeric(df["Order Quantity"])
to_timedelta()

方法将列转换为timedelta数据类型,如果值表示持续时间,可以使用这个函数

 # Convert data type of Duration column to timedelta typedf["Duration "] = pd.to_timedelta(df["Duration"])

删除不必要的列

drop()

方法用于从数据框中删除指定的行或列。

 # Drop Order Region column# (axis=0 for rows and axis=1 for columns)df = df.drop('Order Region', axis=1)# Drop Order Region column without having to reassign df (using inplace=True)df.drop('Order Region', axis=1, inplace=True)# Drop by column number instead of by column labeldf = df.drop(df.columns[[0, 1, 3]], axis=1)  # df.columns is zero-based

数据不一致处理

数据不一致可能是由于格式或单位不同造成的。Pandas提供字符串方法来处理不一致的数据。

str.lower() & str.upper()

这两个函数用于将字符串中的所有字符转换为小写或大写。它有助于标准化DataFrame列中字符串的情况。

 # Rename column names to lowercasedf.columns = df.columns.str.lower()

 # Rename values in  Customer Fname column to uppercasedf["Customer Fname"] = df["Customer Fname"].str.upper()

str.strip()

函数用于删除字符串值开头或结尾可能出现的任何额外空格。

 # In Customer Segment column, convert names to lowercase and remove leading/trailing spacesdf['Customer Segment'] = df['Customer Segment'].str.lower().str.strip()

replace()

函数用于用新值替换DataFrame列中的特定值。

 # Replace values in datasetdf = df.replace({"CA": "California", "TX": "Texas"})

 # Replace values in a spesific columndf["Customer Country"] = df["Customer Country"].replace({"United States": "USA", "Puerto Rico": "PR"})

mapping()

可以创建一个字典,将不一致的值映射到标准化的对应值。然后将此字典与replace()函数一起使用以执行替换。

 # Replace specific values using mappingmapping = {'CA': 'California', 'TX': 'Texas'}df['Customer State'] = df['Customer State'].replace(mapping)

rename()

函数用于重命名DataFrame的列或索引标签。

 # Rename some columnsdf.rename(columns={'Customer City': 'Customer_City', 'Customer Fname' : 'Customer_Fname'}, inplace=True)# Rename some columnsnew_names = {'Customer Fname':'Customer_Firstname', 'Customer Fname':'Customer_Fname'}df.rename(columns=new_names, inplace=True)df.head()

总结

Python pandas包含了丰富的函数和方法集来处理丢失的数据,删除重复的数据,并有效地执行其他数据清理操作。

使用pandas功能,数据科学家和数据分析师可以简化数据清理工作流程,并确保数据集的质量和完整性。

https://avoid.overfit.cn/post/d594591441dd47b2b1a6264c1c71368a

作者:Python Fundamentals

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

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

相关文章

opencv进阶02-在图像上绘制多种几何图形

OpenCV 提供了方便的绘图功能,使用其中的绘图函数可以绘制直线、矩形、圆、椭圆等多种几何图形,还能在图像中的指定位置添加文字说明。 OpenCV 提供了绘制直线的函数 cv2.line()、绘制矩形的函数 cv2.rectangle()、绘制圆的函数cv2.circle()、绘制椭圆的…

【Quarkus技术系列】「云原生架构体系」在云原生时代下的Java“拯救者”是Quarkus,那云原生是什么呢?

云原生时代下的Java"拯救者" 在云原生时代,其实Java程序是有很大的劣势的,以最流行的spring boot/spring cloud微服务框架为例,启动一个已经优化好,很多bean需要lazy load的application至少需要3-4秒时间,内…

一站式自动化测试平台-Autotestplat

3.1 自动化平台开发方案 3.1.1 功能需求 3.1.3 开发时间计划 如果是刚入门、但有一点代码基础的测试人员,大概 3 个月能做出演示版(Demo)进行自动化测试,6 个月内胜任开展工作中项目的自动化测试。 如果是有自动化测试基础的测试人员,大概 …

面试热题(数组中的第K个最大元素)

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 输入: [3,2,1,5,6,4] 和 k 2 输出: 5提到数组中最大元素,我们往往想到就是先给数组…

判断自己网络所在的NAT类型

文章目录 各NAT类型介绍软件准备流程 各NAT类型介绍 NAT0: OpenInternet,没有经过NAT地址转换,公网IP NAT1: Full Cone NAT,动态家宽可以达到最优的状态,外网设备可以主动发信息给NAT1网络内的设备。 NAT2: Address-Restricted C…

Mybatis 源码 ④ :TypeHandler

文章目录 一、前言二、DefaultParameterHandler1. DefaultParameterHandler#setParameters1.1 UnknownTypeHandler1.2 自定义 TypeHandler 三、DefaultResultSetHandler1. hasNestedResultMaps2. handleRowValuesForNestedResultMap2.1 resolveDiscriminatedResultMap2.2 creat…

K8S系列二:实战入门

写在前面 本文是K8S系列第二篇,主要面向对K8S新手同学,阅读本文需要读者对K8S的基本概念,比如Pod、Deployment、Service、Namespace等基础概念有所了解。尚且不熟悉的同学推荐先阅读本系列的第一篇文章:《K8S系列一:概…

远程控制医疗行业应用解析:如何满足医院合规需求?

远程控制医疗行业应用解析:如何满足医院合规需求? 作为一个起源于IT行业的技术,以远程桌面为基础的远程控制技术目前在医疗领域也已经有了比较广阔的应用前景,尤其是在医疗数字化系统/设备的远程运维场景,已经有了一些…

如何正确下载tomcat???

亲爱的小伙伴,千万别再去找下网站下载啦,这样詪容易携带病毒。 我们去官方网址下载。 Apache Tomcat - Welcome! 最后下载解压即可。。。

2024软考系统架构设计师论文写作要点

一、写作注意事项 系统架构设计师的论文题目对于考生来说,是相对较难的题目。一方面,考生需要掌握论文题目中的系统架构设计的专业知识;另一方面,论文的撰写需要结合考生自身的项目经历。因此,如何将自己的项目经历和专业知识有机…

SQL server中substring 的用法

一:substring函数是SQL中截取字段数据中的其中一部分 --列:提取abdcsef中的abc数据,使用substring实现select substring(abdcsef,1,3) --‘1’表示截取的起始位置是从第一个字符开始,‘3’表示截取后得到的字符串长度为3个字符 二&#xff1…

React源码解析18(7)------ 实现事件机制(onClick事件)

摘要 在上一篇中,我们实现了useState的hook,但由于没有实现事件机制,所以我们只能将setState挂载在window上。 而这一篇主要就是来实现事件系统,从而实现通过点击事件进行setState。 而在React中,虽然我们是将事件绑…

前后端分离------后端创建笔记(07)表单验证

1、我输入数据,然后关闭,重新打开会发现残存的数据仍然保留着 2、点了这个x号,数据就全部被清理了 3、点这三个地方,数据全部都清理掉 4、这里先写一个方法 4.1 定义一个方法 4.2 这里表单的数据在哪里,就是这个 4.3 …

在 Linux 中使用 cp 命令

cp 命令是 Linux 中一个重要的命令,你可能经常会用到它。 正如名称所示,cp 代表 复制copy,它被用于 在 Linux 命令行中复制文件和目录。 这是一个相对简单的命令,只有几个选项,但你仍有必要深入了解它。 在展示 cp …

VLLM推理流程梳理

0x0. 前言 本文在对VLLM进行解析时只关注单卡情况,忽略基于ray做分布式推理的所有代码。 0x1. 运行流程梳理 先从使用VLLM调用opt-125M模型进行推理的脚本看起: from vllm import LLM, SamplingParams# Sample prompts. prompts ["Hello, my n…

二次封装element-plus上传组件,提供校验、回显等功能

二次封装element-plus上传组件 0 相关介绍1 效果展示2 组件主体3 视频组件4 Demo 0 相关介绍 基于element-plus框架,视频播放器使用西瓜视频播放器组件 相关能力 提供图片、音频、视频的预览功能提供是否为空、文件类型、文件大小、文件数量、图片宽高校验提供图片…

el-table实现懒加载(el-table-infinite-scroll)

2023.8.15今天我学习了用el-table对大量的数据进行懒加载。 效果如下: 1.首先安装: npm install --save el-table-infinite-scroll2 2.全局引入: import ElTableInfiniteScroll from "el-table-infinite-scroll";// 懒加载 V…

clion2020.3配置clang-format

标题clion 启用clang-format 文件->设置->编辑器->代码样式. 为了保持原有代码风格不变,可以把原始的配置风格先导出,最好直接保存到自己的工程下,.clang-format是隐藏文件,需要用ctrlH才能看到 文件->设置->编辑…

SpringBoot复习:(45)@Component定义的bean会被@Bean定义的同名的bean覆盖

有同名的bean需要配置: spring.main.allow-bean-definition-overridingtrue 否则报错。 package cn.edu.tju.component;import org.springframework.stereotype.Component;Component public class Person {private String name;private int age;{this.name "…

OpenHarmony Meetup 广州站 OpenHarmony正当时—技术开源

招募令 OpenHarmony Meetup 广州站 火热招募中,等待激情四射的开发者,线下参与OpenHarmonyMeetup线下交流 展示前沿技术、探讨未来可能、让你了解更多专属OpenHarmony的魅力 线下参与,先到先得,仅限20个名额! 报名截止时间8月23日…