Python数据分析第三课:数据的处理(删除数据及空值、重复数据的处理)

我们分析的数据来源有很多种,例如:爬取、公司数据库、数据公司等。但是这些数据中有些数据项是我们不需要的,甚至可能会存在重复数据和空值的情况。

一、删除数据

import pandas as pd
df = pd.read_excel(r'C:\Users\lin-a\Desktop\data\rate.xlsx')
print(df.shape)
print(df.head())

# 输出结果:
(219, 15)
      CountryName Country Code        1990        2000        2007  \
0     Afghanistan          AFG  101.094930  103.254202  100.000371   
1         Albania          ALB   61.808311   59.585866   50.862987   
2         Algeria          DZA   87.675705   62.886169   49.487870   
3  American Samoa          ASM         NaN         NaN         NaN   
4         Andorra          ADO         NaN         NaN         NaN   

         2008        2009       2010       2011       2012       2013  \
0  100.215886  100.060480  99.459839  97.667911  95.312707  92.602785   
1   49.663787   48.637067        NaN  46.720288  45.835739  45.247477   
2   48.910002   48.645026  48.681853  49.233576  49.847713  50.600697   
3         NaN         NaN        NaN        NaN        NaN        NaN   
4         NaN         NaN        NaN        NaN        NaN        NaN   

        2014       2015  Change 1990-2015  Change 2007-2015  
0  89.773777  86.954464        -14.140466        -13.045907  
1  44.912168  44.806973        -17.001338         -6.056014  
2  51.536631  52.617579        -35.058127          3.129709  
3        NaN        NaN               NaN               NaN  
4        NaN        NaN               NaN               NaN  

在结果中,我们发现有多个NaN,表明的是文件的单元格中没有值,在使用pandas读取后就会用NaN表示,也就是我们常说的空值

在Numpy中提供了nan的值,如果你想要创建一个空值可以使用如下的代码:

from numpy import nan as NaN

而且需要注意的是,NaN比较特殊的点是其本身是float类型的数据

from numpy import nan as NaN
print(type(NaN))

# 输出结果:
<class 'float'>

当NaN参与到数据计算中,其最终结果永远都是NaN。

from numpy import nan as NaN
print(NaN+1)

# 输出结果:
nan

所以,空值是会影响我们的计算结果的

对于大批量的Series数据,使用肉眼很难判断空值的存在,此时,我们需要先对空值进行过滤。

import pandas as pd
se = pd.Series([4,NaN,8,NaN,5])
print(se.notnull())
print('='*20)
print(se[se.notnull()])

# 输出结果:
0     True
1    False
2     True
3    False
4     True
dtype: bool
====================
0    4.0
2    8.0
4    5.0
dtype: float64

而在DataFrame类型数据中,一般我们会将存在NaN的数据使用dropna()方法全部删掉。

df1 = df.dropna()

dropna()是删除空值数据的方法:

  • 默认将含有NaN的整行数据删掉
  • 若想要删除整行都是空值的数据需要添加how='all’参数;
  • 如果要对列做删除操作,需要添加axis参数:axis=1表示列,axis=0表示行;
  • 也可以使用thresh参数筛选要删除的数据,thresh=n保留至少n个非NaN数据的行。

那么,如果我只是想要删除两行数据该怎么做呢?可以使用df.drop()方法,了解一下该函数:

DataFrame.drop(labels=None,axis=0,index=None,columns=None,inplace=False)

详细参数如下所示:

  • labels:就要删除的行或列的名字,用列表给定
  • index:直接指定要删除的行
  • columns:直接指定要删除的列
  • inplace=False:默认该删除操作不改变原数据,而是返回一个执行删除操作后的新dataframe
  • inplace=True:会直接在源数据上进行删除操作,删除后无法还原

所以,根据参数可以总结出删除行列有两种方式:

  • labels = [],axis=0的组合
  • index或columns直接指定要删除的行或列
# 第一种方法
import pandas as pd 
df = pd.read_excel(r'C:\Users\lin-a\Desktop\data\rate.xlsx')
 # 删除第2行和第3行
df3 = df.drop(labels=[0,1],axis=0)
print(df3)

# 输出结果:
	CountryName	Country Code	1990	2000	2007	2008	2009	2010	2011	2012	2013	2014	2015	Change 1990-2015	Change 2007-2015
2	Algeria	DZA	87.675705	62.886169	49.487870	48.910002	48.645026	48.681853	49.233576	49.847713	50.600697	51.536631	52.617579	-35.058127	3.129709
3	American Samoa	ASM	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
4	Andorra	ADO	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN	NaN
5	Algeria	DZA	87.675705	62.886169	49.487870	48.910002	48.645026	48.681853	49.233576	49.847713	50.600697	51.536631	52.617579	-35.058127	3.129709
6	Angola	AGO	101.394722	100.930475	102.563811	102.609186	102.428788	102.035690	102.106756	101.836900	101.315234	100.637667	99.855751	-1.538971	-2.708060
...	...	...	...	...	...	...	...	...	...	...	...	...	...	...	...
214	Virgin Islands (U.S.)	VIR	53.546901	52.647183	49.912779	50.459425	51.257336	52.382523	
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值