欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

pythoh之数据分析pandas(6)

程序员文章站 2022-07-10 21:41:35
python之数据分析Pandas(6)前言今天我们来学习一下pandas中对缺失值的处理,包括isnull、notnull、dropna、fillna等等。开始isnull 和 notnull我们使用read_excel来读取表格并且对其进行一些操作。studf = pd.read_excel("./datas/student_excel/student_excel.xlsx", skiprows=2)studf#读取出来的数据Unnamed: 0姓名科目分数0NaN小...

python之数据分析Pandas(6)

前言

今天我们来学习一下pandas中对缺失值的处理,包括isnull、notnull、dropna、fillna
等等。

开始

isnull 和 notnull

我们使用read_excel来读取表格并且对其进行一些操作。

studf = pd.read_excel("./datas/student_excel/student_excel.xlsx", skiprows=2)
studf
#	读取出来的数据
Unnamed: 0	姓名	科目	分数
0	NaN		小明	语文	85.0
1	NaN		NaN		数学	80.0
2	NaN		NaN		英语	90.0
3	NaN		NaN		NaN		NaN
4	NaN		小王	语文	85.0
5	NaN		NaN		数学	NaN
6	NaN		NaN		英语	90.0
7	NaN		NaN		NaN		NaN
8	NaN		小刚	语文	85.0
9	NaN		NaN		数学	80.0
10	NaN		NaN		英语	90.0

这个读取表格后面的skipprows是去掉空行的操作,在表格中也许有一些没有用的空行,我们可以指定去掉几行空行。在我们读取完毕之后,输出一个DataFrame表格,并且去掉了原来的1、2行,同时我们在读取的过程中,如果表格中有些数据没有,就会用NaN代替,表示此处没有数据。

这个是表格中原有的数据pythoh之数据分析pandas(6)
首先,我们使用isnull检测是否为空值,这个方法回返回一个Boolean值,如果是空值则返回True,如果不是则返回False,同样是在DataFrame表格中展示。

studf.isnull()
# 输出的结果。
Unnamed: 0	姓名	科目	分数
0	True	False	False	False
1	True	True	False	False
2	True	True	False	False
3	True	True	True	True
4	True	False	False	False
5	True	True	False	True
6	True	True	False	False
7	True	True	True	True
8	True	False	False	False
9	True	True	False	False
10	True	True	False	False

这个表格和上面输出的刚好对应,我们除了一次性处理空值,也可以进行单独判断,返回的是一个Series类型。同样通过Boolean反馈。

studf["分数"].isnull()
# 输出的结果
0     False
1     False
2     False
3      True
4     False
5      True
6     False
7      True
8     False
9     False
10    False
Name: 分数, dtype: bool

isnull()函数判断是否为空值,而notnull()函数则和它相反,如果是空值则返回False,如果不是空值则返回True。用法是一样的。同样我们还可以结合oc()函数进行一些更加高级的操作。

studf.loc[studf["分数"].notnull(), :]	# 筛选没有空分数的所有行
	Unnamed: 0	姓名	科目	分数
0	NaN			小明	语文	85.0
1	NaN			NaN		数学	80.0
2	NaN			NaN		英语	90.0
4	NaN			小王	语文	85.0
6	NaN			NaN		英语	90.0
8	NaN			小刚	语文	85.0
9	NaN			NaN		数学	80.0
10	NaN			NaN		英语	90.0

这个loc()函数先进行查询,然后里面判断【分数】这个列的每这个值是不是空值,如果不是空值,就返回True,符合要求输出。是空值就不会加入要整合的队列中。所以和上面的相比少了几行。

dropna

Pandas为我们提供了dropna()函数对空值进行删除,可以删除空值所对应的行,也可以删除对应的列,只要我们进行参数的约束就好。

studf.dropna(axis="columns", how='all', inplace=True)	#删除都为空值所对应的列

	姓名	科目	分数
0	小明	语文	85.0
1	NaN		数学	80.0
2	NaN		英语	90.0
3	NaN		NaN		NaN
4	小王	语文	85.0
5	NaN		数学	NaN
6	NaN		英语	90.0
7	NaN		NaN		NaN
8	小刚	语文	85.0
9	NaN		数学	80.0
10	NaN		英语	90.0
  • axis : 删除行还是列,{0 or ‘index’, 1 or ‘columns’}, default 0
  • how :如果等于any则任何值为空都删除,如果等于all则所有值都为空才删除
  • inplace : 如果为True则修改当前df,否则返回新的df

因为之前的第一列都为空值,因此第一列就被无情的删除了,但是别的列因为不是所有的值都为空值,所以保存下来了。如果把axis改为等于index,就是删除行了,其他操做是一样的。

fillna

学完了删除,当然还要学习填充了,Pandas的fillna()函数就给我们提供了这一便利。

studf.fillna({"分数":0})	#把分数这列为空值的地方填充为0
# 等同于
studf.loc[:, '分数'] = studf['分数'].fillna(0) #查询分数空值的覆盖写入
#	输出
	姓名	科目	分数
0	小明	语文	85.0
1	NaN		数学	80.0
2	NaN		英语	90.0
4	小王	语文	85.0
5	NaN		数学	0.0
6	NaN		英语	90.0
8	小刚	语文	85.0
9	NaN		数学	80.0
10	NaN		英语	90.0

我们还可以选择填充空值前后的数值给空值。

  • value:用于填充的值,可以是单个值,或者字典(key是列名,value是值)
  • method :等于ffill使用前一个不为空的值填充forword fill;等于bfill使用后一个不为空的值填充backword fill
  • axis: 按行还是列填充,{0 or ‘index’, 1 or ‘columns’}
  • inplace :如果为True则修改当前df,否则返回新的df
# 使用前面的有效值填充,用ffill:forward fill
studf.loc[:, '姓名'] = studf['姓名'].fillna(method="ffill")
	姓名	科目	分数
0	小明	语文	85.0
1	小明	数学	80.0
2	小明	英语	90.0
4	小王	语文	85.0
5	小王	数学	0.0
6	小王	英语	90.0
8	小刚	语文	85.0
9	小刚	数学	80.0
10	小刚	英语	90.0

这个方法就是把姓名这一列中,含有空值的进行copy,而copy的就是这个空值前面的值。如果使用bfill就是copy空值后面的值。大家可以尝试一下。当我们把数据清洗完毕后,我们就可以用to_excel()把弄好的数据给存到表格中去了。

结尾

今天学习的就是这些,多多指教,共同进步。

本文地址:https://blog.csdn.net/qq_42909511/article/details/107364397