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

本文介绍了Python数据分析中数据处理的三个关键步骤:删除数据、空值处理和重复数据处理。详细讲解了如何使用pandas的dropna(), drop_duplicates()等方法进行数据清洗,并给出了实际操作示例。" 110174075,10294537,Python爬取同花顺行业历史数据与成分股解析,"['Python爬虫', '网络爬虫', '数据获取', '同花顺API', '网页解析']
摘要由CSDN通过智能技术生成

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

一、删除数据

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	53.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值