干净整洁的数据是后续进行研究和分析的基础。数据科学家们会花费大量的时间来清理数据集,毫不夸张地说,数据清洗会占据他们80%的工作时间,而真正用来分析数据的时间只占到20%左右。
所以,数据清洗到底是在清洗些什么?
通常来说,你所获取到的原始数据不能直接用来分析,因为它们会有各种各样的问题,如包含无效信息,列名不规范、格式不一致,存在重复值,缺失值,异常值等.....
如果你在学习Python的过程当中有遇见任何问题,可以加入我的python交流学习qq群:250933691,多多交流问题,互帮互助,群里有不错的学习教程和开发工具。学习python有任何问题(学习方法,学习效率,如何就业),可以随时来咨询我
本文会给大家介绍如何用Python中自带的Pandas和NumPy库进行数据清洗。在正式讲解之前,先简单介绍一下这两个非常好用的库。
Pandas的名称来自于Panel data和Python数据分析data analysis,是Python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,被作为金融数据分析工具,为时间序列分析提供了很好的支持,并于2009年底开源出来。
NumPy是Numeric Python的缩写,是Python的一种开源的数值计算扩展,可用来存储和处理大型矩阵matrix,比Python自身的嵌套列表结构要高效的多,提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库,专为进行严格的数字处理而产生。
目录
一、了解数据
二、清洗数据
去除不需要的行、列
重新命名列
重新设置索引
用字符串操作规范列
用函数规范列
删除重复数据
填充缺失值
三、总结
【注】为了清晰直观地展示数据清洗操作,本文会用到几个不同的数据集,重点是方法的讲解。
【工具】Python 3
一、了解数据
拿到一个全新的数据集,应该从哪里入手?
没错,我们需要先了解数据,看看它长什么样子。这里用tushare.pro上面的日线行情数据进行展示,以浦发银行(600000.SH)为例。常用的方法和属性如下:
.head()
.tail()
.shape
.columns
.info()
.describe()
.value_counts()
首先,获取数据:
importpandasaspd
importnumpyasnp
importmatplotlib.pyplotasplt
importtushareasts
pd.set_option('display.max_columns',100)# 设置显示数据的最大列数,防止出现省略号…,导致数据显示不全
pd.set_option('expand_frame_repr',False)# 当列太多时不自动换行
pro = ts.pro_api()
df = pro.daily(ts_code='600000.SH', start_date='20190401', end_date='20190430')
.head() 查看前n行数据,默认值是5
df.head()
Out[1]:
ts_codetrade_dateopenhighlowclosepre_closechangepct_chgvolamount
0 600000.SH20190430 11.7012.0911.7011.9711.480.494.26831234747.381466714.710
1 600000.SH20190429 11.3511.5411.3411.4811.320.161.4134385869.38442046.727
2 600000.SH20190426 11.4311.5611.2811.3211.54-0.22-1.9064424695.81485267.261
3 600000.SH20190425 11.5611.6911.4811.5411.62-0.08-0.6885408761.29473973.527
4 600000.SH20190424 11.7611.7711.5111.6211.70-0.08-0.6838382011.08444929.313
.tail() 查看后n行数据,默认值是5
df.tail()
Out[2]:
ts_codetrade_dateopenhighlowclosepre_closechangepct_chgvolamount
16 600000.SH20190408 11.7911.9611.6511.7211.710.010.0854778703.73920513.531
17 600000.SH20190404 11.5511.7111.5411.7111.500.211.8261752325.27876099.547
18 600000.SH20190403 11.3711.5411.3411.5011.440.060.5245502710.29575799.446
19 600000.SH20190402 11.5011.5211.4111.4411.440.000.0000467147.10534896.810
20 600000.SH20190401 11.3611.5211.2911.4411.280.161.4184706374.05808657.530
.shape 查看数据维数
df.shape
Out[3]: (21, 11)
.columns 查看所有列名
df.columns
Out[4]:
Index(['ts_code','trade_date','open','high','low','close','pre_close',
'change','pct_chg','vol','amount'],
dtype='object')
.info() 查看索引、数据类型和内存信息
df.info()
RangeIndex:21entries,0to20
Data columns (total11columns):
ts_code21non-nullobject
trade_date21non-nullobject
open21non-nullfloat64
high21non-nullfloat64
low21non-nullfloat64
close21non-nullfloat64
pre_close21non-nullfloat64
change21non-nullfloat64
pct_chg21non-nullfloat64
vol21non-nullfloat64
amount21non-nullfloat64
dtypes: float64(9),object(2)
memory usage:1.9+ KB
.describe() 查看每列数据的基本统计值,包括计数值、均值、标准差、最小最大值、1/4、1/2、3/4分位数。
df.describe()
O