当前位置: 移动技术网 > IT编程>脚本编程>Python > pythoh之数据分析pandas(6)

pythoh之数据分析pandas(6)

2020年07月16日  | 移动技术网IT编程  | 我要评论
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代替,表示此处没有数据。

这个是表格中原有的数据
首先,我们使用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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网