python loc函数_Python数据科学实践 | 第13期:Pandas 2

620ed55202d532a972c32567efa051dd.gif f4c3524cb5e2a76000642872a0da4a63.png

e891e4701128a02f5fc85ddcacaf6100.png

大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧。本期内容主要由智亿同学与政委联合推出。

上一节(戳这里)通过火锅团购数据学习了:

  • 如何使用Pandas读入csv、excel文件;

  • 如何使用Pandas过滤重复值、缺失值。

这一节我们继续来学习Pandas这个神器的其他武功:

  • 学习如何使用Pandas进行切片操作;

  • 学习如何进行统计描述分析;

  • 同时介绍一些常用技巧。

首先,咱们假设用Pandas已经读入数据,并且完成了去重与去缺失值(参见上一节)。现在存储的数据名字为raw_data2。

1、切片函数—最“笨”的办法

一般情况下“人均”字段里正常情况下只能填100, 200这类数字,但是还偏偏有人填了“人均:100”。你可能要问了,怎么还有“这么贴心”的店家?还别说,真有,大部分店家都“这么贴心”。请看商户信息的第二行与第五行。

5303d097ae8d1636e8f70212321ae150.png

Q:

这怎么处理?

A:

你可能第一反应是:”Pandas判断表达式“。严格来说,这没错。但是,如果又冒出来”人均100“,”大概100左右“,”差不多100“,这就没法用Pandas判断表达式了。这类表达式只能用“==”,“>=”,“>”,“<=”, “

Q:

这可如何是好?

A:

为简单起见,在这一小节只能先采用切片函数,再调用for循环+if判断的方式对上面提到的几种情况进行筛选,在后面的小节,我们将采用【apply()函数 + re正则表达式】进行处理。

表3.1-4-1 切片函数

43d29cd3a67158a518cc3c687fabe725.png

6807b3b1ce87b35395eae2b135092b0c.gif

类似于Python内置list类型,Pandas的切片操作也可以指定切片的起始位置或只指定其一。

6807b3b1ce87b35395eae2b135092b0c.gif

首先,用上述切片函数查看一下“人均”这一列到底怎么了?

1s1_average = raw_data2.loc[1,'人均']
2print(type(s1_average)) #返回值为float
3s2_average = raw_data2.loc[2,'人均']
4print(type(s2_average)) #返回值为str

其次,通过返回值应该理解raw_data2中的“人均”这一列用的是Series存储的。数字的地方用float的类型,而有特殊字符的地方用str类型存储。那么下面就来重新清洗“人均”这一列吧。

例1 切片操作

 1filter_words = ['人均:', '人均', '大概', '左右', '差不多'] #定义需要过滤的词
2for i in range(len(raw_data2)): 3    value = raw_data2['人均'].iloc[i] #取出人均这一行中的值
4    if type(value) is int or type(value) is float:  5        continue #判断该值是否为整数或者浮点类型数字,如果满足则跳过进入下一步 6    for word in filter_words: 7        if word in value: #判断需要过滤的词是否在value中,如果在则去除 8            raw_data2.loc[i, '人均'] = raw_data2.loc[i, '人均'].replace(word, '')
9
10raw_data2.head() 

运行结果如图1。

3e0815367a20ae7fc2f106d9d395b435.png

图1

在这里,我们使用了Pandas的iloc和loc方法来选取每一行的元素,再对其进行类型判断,如果为int或者float类型,说明不存在错填的情况,直接continue,对于错误值,采用Python的字符串原生方法replace()替换。

一点题外话,使用【切片函数+for循环+if判断】的方法实现方式并不Pythonic,不建议轻易采用。更推荐采用【apply() 函数 封装for循环 + if判断】的方法,不但更Pythonic,速度也更快。这种方法在后面的章节中会提到。

2.描述性统计—一个函数搞定

这一小节中,我们讨论:

  • astype()函数

  • 使用describe()函数

  • 其他描述性统计函数

表2 其他函数

96d8ff011ef8aace40ccf8cb42325866.png

例2 其他函数

1raw_data2['人均'] = raw_data2['人均'].astype(float)
2raw_data2.describe()

运行结果如图2。

8152ba365647ad0d8b99796af11ccb80.png

图2 描述性统计

注意,由于在之前小节,“人均”字段中存在冗余的字符串,因此,Pandas在读入数据时会把所有数据都当做字符串处理,调用describe()之前需要转换成float类型。调用describe()可以很方便地观察数据的均值、标准差、最大最小值、四分位数等基本情况。

完整的Pandas统计方法见表3。

表3 其他可直接调用的方法

4a7e13bc65ab7e057268d3eeefa0a28d.png

3.其他——实用的小操作

其他简单操作还包括:

 1# 选择其中一列元素
2raw_data2[column1]
3
4# 选择两列元素
5raw_data2[[column1, column2]]
6
7# 选择评分大于3.5分的商家所有信息
8raw_data2[raw_data['评分'] > 3.5]
9
10# 打印所有列名
11raw_data2.columns
12
13# 打印所有行索引
14raw_data2.index
15
16# 得到每一行的所有值
17raw_data2.values
18
19# 人均这列所有元素加100
20raw_data2['人均'] + 100
21
22# 按“人均”排序,从小到大
23raw_data2.sort_values(['人均'], ascending=True)
24
25# 按index排序
26raw_data2.sort_index()
d78610e767be9b642a1b3e720e2f3694.png

好了,今天就先介绍到这里。

作业:载入pandas包,读入coupon_nm的文件。利用本节所学过的知识检查两个变量“团购价”与“市场价”是否有缺失值(如何处理),是否有需要用本节介绍的切片方法调整内容?

▼往期精彩回顾▼初步搭建数据科学工作环境

Conda的使用

Spyder入门

Jupyter入门

Markdown

简单读写数据

数据类型

数据结构

控制流

函数与模块

Numpy

pandas1

e2e91bcad9317c28591701cb35b25c3c.png

4fab7d548b5e878fd5c0d236f6af6af7.png

点击这里阅读原文
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值