数据分析二、pandas库数据处理

数据处理指的是根据数据分析的目的,将收集到的数据进行加工、整理,形成适合数据分析的样式。主要分三个步骤来处理我们的数据,它们分别是:数据清洗、数据整理以及数据写入。

一、数据清洗

以下表数据为例:
在这里插入图片描述
这份数据索引为 1、3、4 的行完全重复。有一些数据的值为 NaN ,在 pandas 库中,NaN 代表缺失值,意思是这里的数据是空的。
在订单量、单价和销售额列中,我们能明显看到 0 和 999999999.0 的数值。首先,订单量如果为 0,那么这样的订单根本就不应该出现,这些数据也完整存在异常。
综上所述,这份数据同时存在缺失值、重复值以及异常值的问题,在进行数据处理时我们需要先将这些数据问题处理掉,这一过程也叫做数据清洗。

数据清洗的三个步骤

1.1处理缺失值

df.info() 能提炼出基本的数据信息,从而能让我们对于整体的数据有一个大概的印象
info—[ˈɪnfəʊ]—信息

# 查看 mask_data 的基本信息总结
mask_data.info()

运行结果:
在这里插入图片描述
其中主要包括:整体数据的总行数、各列数据类型统计、各列的列名、各列总共有多少非空数据、表格占用的系统空间等。
当非空数据与数据总量101942不一致时,说明这份数据有可能存在缺失值,处理这些缺失值的第一步,就是找到它们。

1.1.1查找数据中的缺失值

在 pandas 库中,我们可以使用 isna() 方法来查找 DataFrame 对象以及 Series 对象中的缺失值。它可以将查找结果以 DataFrame 对象或者 Series 对象的形式进行返回。

                      isna---伊斯纳

df.isna()返回的是 DataFrame 对象,Series.isna() 返回的就是 Series 对象。
返回对象中的内容都是布尔值,缺失数据会用 True 来表示,False 则代表这里的数据不缺失。
示例:

# 查看 mask_data 的缺失值
mask_data.isna()

在这里插入图片描述
从结果中我们可以直接看到数据前后 5 行的缺失情况,其中 True 的位置表示该位置的数据为缺失值。在 pandas 库中,除了直接输入 DataFrame 对象的名称能查看数据的前后 5 行之外,还可以使用df.head()或df.tail()方法查看数据。
对 DataFrame 对象使用 df.head() 方法默认可以查看数据的前 5 行,df.tail() 方法则默认可以查看数据的后 5 行
除了默认查看五行还可以在df.head()及df.tail()括号中填写数字,指定要看的行数
如:df.head(10) 查看前10行
head–[hed]–头 ,,, tail-- [teɪl] --n.尾;尾巴
示例:

# 查看数据后 5 行
mask_data.tail()

在这里插入图片描述

pandas 库中,NaN 代表的就是缺失数据。
对于缺失值,最简单的方法就是将含有缺失值的行直接删除,也可以给缺失值填充数据

1.1.2删除缺失值 dropna() (德普纳)

在 pandas 库中,可以使用 dropna() 方法直接删除 DataFrame 对象和 Series 对象中含有缺失值的数据
只要执行 df.dropna() 这一代码方法,就可以将 DataFrame 对象中包含缺失值的每一行全部删掉。
例:

# 删除所有缺失值
mask_data.dropna()

这时,当我们运行 mask_data.dropna() 代码返回的是一个删掉所有缺失数据的 DataFrame 对象,但这并不意味着它修改了 mask_data 数据,原mask_data 数据并没有改变,我们需要将 mask_data.dropna() 的运行结果重新赋值给 mask_data 变量,这样就可以将运行结果保存下来。
例:

# 删除所有缺失值
mask_data = mask_data.dropna()
# 查看数据基本信息总结
mask_data.info()

1.1.3

如果我们需要针对某几列的缺失数据进行删除,就需要用到df.dropna()的 subset 参数。

                     subset--- [ˈsʌbset] ---子集,分组;小组;

把要指定的列名写进中括号[]中,然后赋值给 subset 参数,就可以限定 dropna() 方法的删除范围。
比如我们想删掉除 test_data 中’品牌’、‘上牌时间’、 '里程数(km)'和 '保值率’四列数据缺失的行,可以如下书写代码:
test_data.dropna(subset=[‘品牌’, ‘上牌时间’, ‘里程数(km)’, ‘保值率’])
subset参数应是列表的形式。
总结图:
在这里插入图片描述

1.2处理重复值

第一步:1.2.1查找重复值:df.duplicated()

                    duplicated--- [ˈdjuːplɪkeɪtɪd‘] --复制,重复

我们可以直接使用 df.duplicated()方法来查找 DataFrame 对象中的重复数据。
使用 df.duplicated() 方法会返回一个 Series 对象,找出所有重复值。重复为 True,不重复为 False。
例:
in [21 ]

# 查找 mask_data 中的重复行
mask_data.duplicated()

Out[21 ]

0         False
1         False
2         False
3          True
4          True
          ...  
100951    False
100952    False
100953    False
100954    False
100955    False
Length: 100956, dtype: bool

返回结果很长…我们完全没有办法用肉眼进行观察。
我们可以将 mask_data.duplicated() 返回的结果放入中括号 [ ] 中,用来索引 mask_data 数据,查看 mask_data 数据中重复的行。

例:
In [ 22 ]

1 # 查看 mask_data 中的重复数据
2 mask_data[mask_data.duplicated()]
Out [ 22 ]
                   订单编号 	   日期	        省	  订单量  单价 销售额
3	535a-4eca-8fa0-9cc54c66e11d	2020-01-01	河南	0.0	30.0	0.0
4	535a-4eca-8fa0-9cc54c66e11d	2020-01-01	河南	0.0	30.0	0.0
412	2b31-4392-be6e-19af71e40261	2020-01-09	河南	1.0	30.0	30.0
441	d707-4d5c-ac10-59d3fd3dc0bb	2020-01-10	广东	1.0	30.0	30.0
845	49f6-4bd5-97a5-aeb075a1c8c3	2020-01-16	湖北	8.0	40.0	320.0
...	...	...	...	...	...	...
100157	1ee1-41a6-8c0a-7c24f988689f	2020-06-25	湖北	8.0	30.0	240.0
100312	c72a-401d-8f11-39becb49d442	2020-06-26	湖北	9.0	30.0	270.0
100321	73f3-4d40-af4e-426548a7c539	2020-06-26	广东	3.0	30.0	90.0
100330	1265-4d27-a5c6-d3d6f44cd594	2020-06-26	广东	3.0	30.0	90.0
100772	a56d-4415-ad6e-020cdb154c35	2020-06-29	其他	0.0	30.0	0.0
448 rows × 6 columns

可以看到,这份数据中含有大量完全重复的行,这种重复数据并不具备分析的意义,而且会影响数据分析的结果,因此我们需要直接删除。

1.2.2删除重复值 df.drop_duplicates()

我们可以使用 pandas 库的 df.drop_duplicates() 方法直接删除 DataFrame 对象中重复出现的整行数据。
例:

In 
  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值