Pandas数据清洗函数大全

news2025/1/17 5:53:19

文章目录

  • 一、drop():删除指定行列
    • 1. 删除指定行
    • 2. 删除指定列
  • 二、del():删除指定列
  • 三、isnull():判断是否为缺失
    • 1. 判断是否为缺失
    • 2. 判断哪些列存在缺失
    • 3. 统计缺失个数
  • 四、notnull():判断是否不为缺失
  • 五、dropna():删除缺失值
    • 1. 导入数据
    • 2. 删除含有NaN值的所有行
    • 3. 删除含有NaN值的所有列
    • 4. 删除元素都是NaN值的行
    • 5. 删除元素都是NaN值的列
    • 6. 删除指定列中含有缺失的行
  • 六. fillna():缺失值填充
    • 1. 导入数据
    • 2. 默认全部填充
    • 3. 用前一行的值填补空值
    • 4. 用后一列的值填补空值
    • 5. 设置填充个数
  • 七、ffill():用前一个元素填充
  • 八、bfill():用后一个元素填充
  • 九、duplicated():判断序列元素是否重复
  • 十、drop_duplicates():删除重复行
    • 1. 判断所有列
    • 2. 按照指定列进行判断
  • 十一、replace():替换元素
    • 1. 单个值替换
    • 2. 多个值替换一个值
    • 3. 多个值替换多个值
    • 4. 使用正则表达式:
  • 十二、str.replace():替换元素
  • 十三、str.split.str():分割元素

一、drop():删除指定行列

drop()函数用于删除指定行,指定列,同时可以删除多行多列

语法格式

DataFrame.drop(
        self,
        labels=None,
        axis: Axis = 0,
        index=None,
        columns=None,
        level: Level | None = None,
        inplace: bool = False,
        errors: str = "raise",
    )

参数说明

  • labels:要删除的行列的名字,接收列表参数,列表内有多个参数时表示删除多行或者多列
  • axis:要删除的轴,与labels参数配合使用。默认为0,指删除行;axis=1,删除列
  • index:直接指定要删除的行
  • columns:直接指定要删除的列
  • inplace:是否直接在原数据上进行删除操作,默认为False(删除操作不改变原数据),而是返回一个执行删除操作后的新dataframe;inplace=True,直接在原数据上修改。

1. 删除指定行

当 axis=0 时,删除指定行

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, 4, 5, 5, 5]},index=list('abcdefgh'))
print(df_obj)
# 删除第一行
df_obj.drop(labels='a', axis=0, inplace=True)
print(df_obj)

运行结果:
在这里插入图片描述

2. 删除指定列

当 axis=1 时,删除指定列

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, 4, 5, 5, 5]}, index=list('abcdefgh'))
print(df_obj)
# 删除data2 
df_obj.drop(labels='data2', axis=1, inplace=True)
print(df_obj)

运行结果:
在这里插入图片描述

二、del():删除指定列

del()函数与drop()函数相比就没有那么灵活了,此操作会对原数据df进行删除,且一次只能删除一列。

语法格式

del df[‘列名’]

案例:

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, 4, 5, 5, 5]}, index=list('abcdefgh'))
print(df_obj)
# 删除data1
del df_obj['data1']
print(df_obj)

运行结果:
在这里插入图片描述

三、isnull():判断是否为缺失

判断序列元素是否为缺失(返回与序列长度一样的bool值)

1. 判断是否为缺失

示例代码:

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'b', 'b', 'c'],
                       'data2': [1, 2, 3, 4, 5],
                       'data3': np.NaN})
print(df_obj)
print(df_obj.isnull())

运行结果:
在这里插入图片描述

2. 判断哪些列存在缺失

isnull().any()会判断哪些”列”存在缺失值,数据清洗中经常用的小技巧

print(df_obj.isnull().any())

运行结果:
在这里插入图片描述

3. 统计缺失个数

isnull().sum()统计每一列的缺失个数

print(df_obj.isnull().sum())

运行结果:
在这里插入图片描述

四、notnull():判断是否不为缺失

判断序列元素是否不为缺失(返回与序列长度一样的bool值),用法与isnull()相似

print(df_obj.notnull())

运行结果:
在这里插入图片描述

五、dropna():删除缺失值

dropna()函数可以删除缺失值

语法格式:

DataFrame.dropna(
        self,
        axis: Axis = 0,
        how: str = "any",
        thresh=None,
        subset=None,
        inplace: bool = False,
    )

参数说明

  • axis:移除行或列,默认为0,即行含有空值移除行
  • how:‘all’所有值为空移除,'any’默认值,包含空值移除
  • thresh:包含thresh个空值时移除
  • subset:axis轴上,指定需要处理的标签名称列表
  • inplace:是否替换原始数据,默认False

1. 导入数据

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', np.NaN, 'b', 'c'],
                       'data2': [1, 2, np.NaN, 4, 5],
                       'data3': np.NaN,
                       'data4': [1, 2, 3, 4, 5]})
print(df_obj)

运行结果:
在这里插入图片描述

2. 删除含有NaN值的所有行

默认 axis=0

print(df_obj.dropna())

运行结果:
在这里插入图片描述

3. 删除含有NaN值的所有列

设置 axis=1 删除列

print(df_obj.dropna(axis=1))

运行结果:
在这里插入图片描述

4. 删除元素都是NaN值的行

设置参数 how="all",只有行一整行数据都是NaN的时候才会删除

print(df_obj.dropna(axis=0,how="all"))

运行结果:由于所有行都有至少有一个有效值,所有都没删除
在这里插入图片描述

5. 删除元素都是NaN值的列

print(df_obj.dropna(axis=1,how="all"))

运行结果:
在这里插入图片描述

6. 删除指定列中含有缺失的行

subset参数设置指定列

# 删除data1列有含有缺失的行
print(df_obj.dropna(subset=["data1"], axis=0))

运行结果:
在这里插入图片描述

六. fillna():缺失值填充

缺失值填充

语法格式

fillna(
        self,
        value: object | ArrayLike | None = None,
        method: FillnaOptions | None = None,
        axis: Axis | None = None,
        inplace: bool = False,
        limit=None,
        downcast=None,
    ) -> DataFrame | None

参数说明

  • value:用于填充的空值的值。

  • method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None。定义了填充空值的方法, pad / ffill表示用前面行/列的值,填充当前行/列的空值, backfill / bfill表示用后面行/列的值,填充当前行/列的空值。

  • axis:选择轴,默认0(行),axis=1:列

  • inplace:是否替换原始数据

  • limit:int, default None。如果method被指定,对于连续的空值,这段连续区域,最多填充前 limit 个空值(如果存在多段连续区域,每段最多填充前 limit 个空值)。如果method未被指定, 在该axis下,最多填充前 limit 个空值(不论空值连续区间是否间断)

  • downcast:dict, default is None,字典中的项为,为类型向下转换规则。或者为字符串“infer”,此时会在合适的等价类型之间进行向下转换,比如float64 to int64 if possible。

1. 导入数据

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', np.NaN, 'b', 'c'],
                       'data2': [1, 2, np.NaN, 4, 5],
                       'data3': np.NaN,
                       'data4': [1, 2, 3, 4, 5]})
print(df_obj)

运行结果:
在这里插入图片描述

2. 默认全部填充

# 用0填补空值
print(df_obj.fillna(value=0))

运行结果:
在这里插入图片描述

3. 用前一行的值填补空值

设置参数 method='pad' 用前一行的值填补空值

# 用前一行填充
print(df_obj.fillna(method='pad',axis=0))

运行结果:
在这里插入图片描述

4. 用后一列的值填补空值

设置参数 method='backfill'

# 用后一列的值填补空值
print(df_obj.fillna(method='backfill', axis=1))

运行结果:
在这里插入图片描述

5. 设置填充个数

limit=数字,设置填充个数

# 用后一列的值填补空值,只填充两个
print(df_obj.fillna(method='backfill', axis=1, limit=2))

运行结果:

在这里插入图片描述

七、ffill():用前一个元素填充

前向后填充缺失值,用缺失值的前一个元素填充,与fillna()相比没有那么多可选性

语法格式

ffill(
        self: DataFrame,
        axis: None | Axis = None,
        inplace: bool = False,
        limit: None | int = None,
        downcast=None,
    ) -> DataFrame | None

案例说明:

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df_obj)
print(df_obj.ffill())

运行结果:
在这里插入图片描述

八、bfill():用后一个元素填充

后向填充缺失值,用缺失值的后一个元素填充

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df_obj)
print(df_obj.bfill())

在这里插入图片描述

九、duplicated():判断序列元素是否重复

判断序列元素是否重复

语法格式

DataFrame.duplicated(subset=None,keep='first')

参数说明

  • subset:列标签,可选, 默认使用所有列,只考虑某些列来识别重复项传入列标签或者列标签的序列

  • keep:{‘first’,‘last’,False},默认’first’

    • first:删除第一次出现的重复项。

    • last:删除重复项,除了最后一次出现。

    • false:删除所有重复项

返回布尔型Series表示每行是否为重复行

示例代码:

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, 4, 5, 5, 5]})
print(df_obj)

print(df_obj.duplicated())

运行结果:
在这里插入图片描述

十、drop_duplicates():删除重复行

删除重复行,默认判断全部列,可指定按某些列判断

语法格式

DataFrame.drop_duplicates(
        self,
        subset: Hashable | Sequence[Hashable] | None = None,
        keep: Literal["first"] | Literal["last"] | Literal[False] = "first",
        inplace: bool = False,
        ignore_index: bool = False,
    ) -> DataFrame | None

参数说明

  • subset:列标签,可选, 默认使用所有列,只考虑某些列来识别重复项传入列标签或者列标签的序列

  • keep:{‘first’,‘last’,False},默认’first’

    • first:删除第一次出现的重复项。

    • last:删除重复项,除了最后一次出现。

    • false:删除所有重复项

  • inplace:是否替换原数据,默认是False,生成新的对象,可以复制到新的DataFrame

  • ignore_index:bool,默认为False,如果为True,则生成的轴将标记为0,1,…,n-1。

1. 判断所有列

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, 4, 5, 5, 5]})
print(df_obj)

print(df_obj.drop_duplicates())

运行结果:
在这里插入图片描述

2. 按照指定列进行判断

print(df_obj.drop_duplicates('data2'))

运行结果:
在这里插入图片描述

十一、replace():替换元素

替换元素,可以使用正则表达式

语法格式

replace(
        self,
        to_replace=None,
        value=None,
        inplace: bool = False,
        limit=None,
        regex: bool = False,
        method: str = "pad",
    )

参数说明

  • to_replace: 需要替换的值

  • value:替换后的值

  • inplace: 是否在原数据表上更改,默认 inplace=False

  • limit:向前或向后填充的最大尺寸间隙,用于填充缺失值

  • regex: 是否模糊查询,用于正则表达式查找,默认 regex=False

  • method: 填充方式,用于填充缺失值

    • pad: 向前填充
    • ffill: 向前填充
    • bfill: 向后填充

1. 单个值替换

to_replace接收字符串

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df_obj)

print(df_obj.replace('a',"A"))

运行结果:
在这里插入图片描述

2. 多个值替换一个值

to_replace接收列表

print(df_obj.replace([1, 2], -100))

运行结果:
在这里插入图片描述

3. 多个值替换多个值

to_replace接收列表,value接收列表

print(df_obj.replace([1, 2], [-100, -200]))

运行结果:
在这里插入图片描述

4. 使用正则表达式:

to_replace接收正则语法,设置 regex=True

import numpy as np
import pandas as pd

df_obj = pd.DataFrame({'data1': ['ab', 'abc', 'aaa', 'b', 'b', 'b', 'c', 'c'],
                       'data2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df_obj)
# 替换a开头的
print(df_obj.replace('a.?',"A",regex=True))

运行结果:
在这里插入图片描述

十二、str.replace():替换元素

替换元素,可使用正则表达式

import numpy as np
import pandas as pd

s = pd.Series(['foo', 'fuz', np.nan])
print(s)
print(s.str.replace('f.', 'ba', regex=True))

运行结果:
在这里插入图片描述

十三、str.split.str():分割元素

以指定字符切割列

import numpy as np
import pandas as pd

data = {'洗漱用品':['毛巾|牙刷|牙膏']}

df = pd.DataFrame(data)
print(df)
print(df['洗漱用品'].str.split('|',expand=True))

运行结果:
在这里插入图片描述

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

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

相关文章

Java笔记024-Math类、Arrays类、System类、BigInteger和BigDecimal类、日期类

常用类Math类基本介绍Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数方法一览(均为静态方法)Math常见方法应用案例1、 abs绝对值2、pow求幂3、ceil向上取整4、floor 向下取整5、round 四舍五入6、sqrt 求开方7、random求随机数//思考&am…

Webpack常见的插件和模式

1、认识Plugin Webpack的另一个核心是Plugin,官方有这样一段对Plugin的描述: While loaders are used to transform certain types of modules, plugins can be leveraged to perform a wider range of tasks like bundle optimization, asset manageme…

《对线面试官》| 高频计算机网络面试题 pt.2

目录11、Get与POST的区别12、Session、Cookie 的区别13、简单聊聊 HTTP 协议吧14、URI 和 URL 的区别15、GET 和 POST 方法都是安全和幂等的吗?16、说说 HTTP/1.1 相比 HTTP/1.0 提高了什么性能?17、那上面的 HTTP/1.1 的性能瓶颈,HTTP/2 做了…

中国蚁剑的工作原理

中国蚁剑连接http://192.168.11.157/dvwa/hackable/uploads/pass.php蚁剑连接并同时用wireshark抓取流量1274 行,追踪tcp流因为我们的php.php内容是 $_POST[pass],所以这里是post了一个pass参数,后面跟上了命令。通过站长工具-URL解码/编码 (…

15.Isaac教程--Isaac机器人引擎简介

Isaac机器人引擎简介 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录Isaac机器人引擎简介基础Codelets完整的应用基础 本节介绍如何使用 Isaac 机器人引擎。 它介绍了相关术语并解释了 Isaac 应用程序的结构。 Isaac 应用程序由 JavaS…

卫星AIS接收机

1.设备简介星载AIS模块,专门针对小卫星设计的AIS载荷,设计时考虑到CubeSat的尺寸、重量和功率限制,也可以作为较大的LEO卫星上的有效载荷。2.产品特征独立4信道AIS接收机集成LNA和SAW滤波器AIS帧的数据存储支持频谱样本采集安全在轨软件升级支…

【Wiki】XWiki安装教程_War包版本

目录0、XWiki说明1、war包安装说明1.1、环境说明1.2、如果懒得下载可以使用这边准备好的物料包汇总2、war包安装2.1、Tomcat安装2.2、java安装(需要root权限)2.3 、使用 source /etc/profile 刷新linux配置2.4、数据库安装2.5、解压war包与xip2.6、修改配置文件2.6.1、修改WEB-…

mysql快速生成100W条测试数据(4)全球各城市房价和销售数据并存入mysql数据库

首先这个就是我们需要生成的数据类型,这种只是我们用于测试以及学习时候使用,主要就是全球城市房价的均值和一些虚拟的销售数据 这是之前的文章里面包含一些以前的一些操作流程可以进行参考学习 更加详细操作步骤在第一篇文章里面 mysql快速生成100W条测…

Speckle Revit连接器使用教程

Speckle Revit 连接器目前支持 Autodesk Revit 2020、2021、2022 和 🆕2023。 1、安装Speckle revit连接器 要安装 Revit 连接器并添加 Speckle 帐户,请按照 Speckle 管理器中的说明进行操作。 安装后,可以在Speckle选项卡下的功能区菜单中…

一个前端大神电脑里的秘密

前言作为前端仔,当你入职一家公司,拿到新发的电脑,你会对电脑干点啥,装开发环境?装软件?你是否铺天盖地到处找之前电脑备份的东西?又或者是想不起来有什么上一台电脑好用的软件叫什么名&#xf…

KT148A语音芯片420s秒的语音空间是什么意思,mp3文件支持多大

一、问题简介 我想问一下KT148A这个芯片真的能存420秒的语音么?我随便一个5秒的语音mp3格式都65k了,如果是这样的话 那我的mp3的源文件在最小的采样率和最小码率的情况下 mp3文件可以支持多大?有没有实际测试的数据,使用的是一线串…

【可解释性机器学习】可解释机器学习简介与特征选择方法

特征选择:Feature Importance、Permutation Importance、SHAP1. Introduction什么是可解释机器学习(Explainable ML)?为什么需要Explainable ML?直接使用一些可以interpretable的模型不好吗?2. Local Explanation方法…

Homekit智能家居DIY-智能吸顶灯

灯要看什么因素 照度 可以简单理解为清晰度,复杂点套公式来说照度光通量(亮度)单位面积,简单理解的话就是越靠近灯光,看的就越清楚,是个常识性问题。 不同房间户型对照度的要求自然不尽相同,…

http协议之Range

http协议中可能会遇到:请求取消或数据传输中断,这时客户端已经收到了部分数据,后面再请求时最好能请求剩余部分(断点续传);或者,对于某个较大的文件,能够支持客户端多线程分片下载..…

某集团汽车配件电子图册性能分析案例(三)

背景 汽车配件电子图册系统是某汽车集团的重要业务系统。业务部门反映,汽车配件电子图册调用图纸时,出现访问慢现象。 汽车集团总部已部署NetInside流量分析系统,使用流量分析系统提供实时和历史原始流量。本次分析重点针对汽车配件电子图册…

web服务器、中间件和他们的漏洞

目录 Nginx Apache Tomcat IIS 漏洞 Apache解析漏洞 文件名解析漏洞 罕见后缀 .htaccess文件 Ngnix解析漏洞 畸形解析漏洞(test.jpg/*.php) %00空字节代码解析漏洞 CVE-2013-4547(%20%00) IIS解析漏洞 目录解析漏洞(/test.asp/1.jpg) 文件名解析漏洞(test.asp;…

想转行没方向,PMP证书用处大吗?

当下了要转行的决心,你又陷入另一种焦虑中——怎么转?毕竟“隔行如隔山”。要知道缺乏经验,你要面对的是旷日持久的努力、未知的付出和回报转换率。 但别忘了,在山与山之间,有一些纵横交错的道路相连,可以…

详解SpringMVC

1.DispatcherServlet初始化时机 DispatcherServlet是由spring创建的,初始化是由Tomcat完成的,通过setLoadOnStartup来决定是否为tomcat启动时初始化 Configuration ComponentScan // 没有设置扫描包的话默认扫描当前配置的包及其子包 PropertySource(&…

verilog学习笔记- 11)按键控制蜂鸣器实验

简介: 蜂鸣器按照驱动方式主要分为有源蜂鸣器和无源蜂鸣器,其主要区别为蜂鸣器内部是否含有震荡源。一般的有源蜂鸣器内部自带了震荡源,只要通电就会发声。而无源蜂鸣器由于不含内部震荡源,需要外接震荡信号才能发声。 左边为有源…

JAVA JVM学习

1.JVM介绍 越界检查肯定有用,防止覆盖别的地方的代码。 JVM来评价java在底层操作系统的差异。 2.程序计数器 我们java源代码会变成一条一条jvm指令。 在物理上实现程序计数器,是用一个寄存器。这样速度更快。 程序计数器不会内存溢出 2.1 线程私有 …