pandas对缺失值与重复值的清洗常用函数(1)——25-06-15 第16周 第1篇

前言

上周的《pandas文件读取时的缺失值处理——25-06-08 第15周 第1篇》这篇文章中提到上周主要的学习内容是对DataFrame中缺失值与重复值的处理。这是数据清洗环节的重要步骤,在拿到需要处理的脏数据后,最重要的一个步骤便是对缺失值与重复值的识别处理。

这个部分的知识点十分重要,复杂,需要详细讲解。但限于篇幅与个人精力,本人会将这一部分的知识点拆分为多篇文章。所以建议在所有文章更新完成后再详细阅读。

数据准备

在对代码正式讲解前,让我们先创建一个简单的DataFrame对象,方便展示。

1
2
3
4
5
6
7
8
import pandas as pd

df = pd.[`DataFrame`](#df)(
[{"col1": 15, "col2": 43, "col3": "0-c3"},
{"col1": 15, "col3": "1-c3"},
{"col1": 39, "col2": 39},
{"col2": 66, "col3": "1-c3"}])

通过以上代码,我们创建了一个简单的DataFrame对象,将其打印后的输出如下

1
2
3
4
5
   col1 col2 col3
0 15 43 0-c3
1 15 NaN 1-c3
2 39 39 NaN
3 NaN 66 1-c3

即下列的二维数组

col1 col2 col3
0 15 0-c2 0-c3
1 15 NaN 1-c3
2 39 39 NaN
3 NaN 66 1-c3

我们接下来的演示代码都会基于这个DataFrame对象。所以如果需要进行复现,可以直接复制上面的代码。

好的,让我们现在开始吧。

数据查看

首先,我们先看一看如何读取这个DataFrame对象的各项数据

读取行列数

1
2
3
4
5
6
7
8
sp = df.shape # 读取行列数
print(sp)
i,c = sp # 将行列数值分类
# i,c = df.shape
print("行数:",end="") # 小技巧:end="" 去除换行
print(i)
print("列数:",end="")
print(c)

输出为:

1
2
3
(4,3)
行数:4
列数:3

如上所示,df.shape函数可以快速获取DataFrame对象的行数与列数,把它用在多个DataFrame对象合并前的确认是一个好选择。

读取完行数和列数后,接下来就是读取具体的索引和列名(主要是列名)

读取索引与列名

1
2
3
4
ie = df.index
co = df.columns
print(ie)
print(co)

输出如下:

1
2
RangeIndex(start=0, stop=4, step=1)
Index(['col1', 'col2', 'col3'], dtype='object')

各行输出内容的具体含义如下:

1
RangeIndex(start=0, stop=4, step=1)

这行指的是这个DataFrame对象的索引。我们之前在创建用于举例的DataFrame对象时并没有设置索引的内容,所以pandas库会默认用RangeIndex()进行填充。RangeIndex()及其它index对象可以点击查看

1
Index(['col1', 'col2', 'col3'], dtype='object')

这一行指的是DataFrame对象的列名,列名(columns)是处理数据时的重要数据,对DataFrame对象中的单个数据进行定位时,index与columns两者缺一不可。而index一般情况下默认由上面的RangeIndex填充,所以columns就是我们最重要的数据标志。

随机查看数据

1
2
3
n = 1
sp = df.sample(n) #随机抽取1行数据
print(sp)

运行结果不唯一,其中一个结果如下

1
2
   col1  col2  col3
3 NaN 66.0 1-c3

这个函数很简单,就是随机抽取n行数据,没有什么需要注意的点。

查看数据首末行

1
2
3
4
5
n = 1
hd = df_3.head(1)
ta = df_3.tail(1)
print(hd)
print(ta)

输出如下:

1
2
3
4
   col1  col2  col3
0 15.0 43.0 0-c3
col1 col2 col3
3 NaN 66.0 1-c3

这个函数也不复杂,输出头尾的n行数据。输出数据的类型同样是DataFrame,有的时候可以用于对头尾的切片处理,“从开头/末尾的……行进行如下操作”之类的题型都可以用上。

查看数据类型

1
2
info = df.info()
print(info)

输出如下:

1
2
3
4
5
6
7
8
9
10
11
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 col1 3 non-null float64
1 col2 3 non-null float64
2 col3 3 non-null object
dtypes: float64(2), object(1)
memory usage: 224.0+ bytes
None

这个函数的输出比较复杂,主要是对DataFrame中index与column的详细描述,我们一点点来详细说明。

1
<class 'pandas.core.frame.[`DataFrame`](#df)'>

这一行表示的是df这个DataFrame对象的类型。class在python指的就是“类”这个概念。pandas.core.frame.DataFrame则是指的这个类的具体类型,即DataFrame

然后是下面这行

1
RangeIndex: 4 entries, 0 to 3

这行指的是这个DataFrameindex信息,上文“索引与列名”部分提及过RangeIndex这个类型,其中的“4,0,3”三个数据的具体含义可以通过上下文对比来简单了解。

接下来的这几行十分重要

1
2
3
4
5
6
7
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 col1 3 non-null float64
1 col2 3 non-null float64
2 col3 3 non-null object
dtypes: float64(2), object(1)
1
Data columns (total 3 columns):

这一段可以直接翻译,得到内容:数据列(共3列)

然后是这一个列表:

1
2
3
4
5
 #   Column  Non-Null Count  Dtype  
--- ------ -------------- -----
0 col1 3 non-null float64
1 col2 3 non-null float64
2 col3 3 non-null object

其中,

  1. Column这一列指的是上面举例的DataFrame对象各个列的列名。
  2. Non-Null Count这一列指的是DataFrame对象中各个列有几行非空,意即存在数据。在这个DataFrame对象中,每一列都是存在3个非空数据,所以显示的内容均为3 non-null
  3. Dtype这一列指的是DataFrame对象中各个列的对象类型。如col1col2下属的数据都是数字,所以使用的是float64,即浮点数类型,而col3则是string字符串类型,但实际上字符串类型同时也是一种object,所以展示的才是object
1
dtypes: float64(2), object(1)

这一行是对上面各列的类型总结,在这儿的意思是这一个DataFrame`对象总共有

  1. 两个浮点数类型的列
  2. 一个object类型(通常为string类型)的列。
1
2
memory usage: 224.0+ bytes
None

最后这行指的是内存信息,我们这个竞赛不会使用,所以不多提及。

好了,先写到这吧,还有一部分没有写的,放到下一周吧。


pandas对缺失值与重复值的清洗常用函数(1)——25-06-15 第16周 第1篇
https://blog.19870918.xyz/p/d8d4eec895d14959a9e44cf052f50d06/
Beitragsautor
zhangyi
Veröffentlicht am
June 8, 2025
Urheberrechtshinweis