Pandas 数据处理(二) —— 数据条件选择与排序!

上一篇文章介绍了 Pandas 的基本函数的使用方法,这篇文章主要介绍 Pandas 的条件筛选和排序功能,同样也是借助于一个小案例!

1,读入数据

先利用 read_csv() 函数 把数据都进来,这个数据是一个商品类目的数据,里面有 quantity(类)、name(名字)、description(描述)、price(价格)等几个属性:

import pandas as pd
url = "https://raw.githubusercontent.com/justmarkham/DAT8/master/data/chipotle.tsv"

chipo = pd.read_csv(url,sep = '\t')
chipo

1.png

2,更改某一列的数据类型、字符名

读入的数据中价格列中存在 “$”字符,做数据处理时,需要把该符号去除,这里提供两种方式:

1,list 与 series 替换;先把 某一列每个数据进行格式替换得到list,list 再赋值给需要替换的那一列;

prices = [float(value[1:-1]) for value in chipo.item_price]
chipo.item_price = prices

2,利用 apply() 和 lambda 函数进行替换;

chipo['item_price'] = chipo['item_price'].apply(lambda x:float(x[1:-1]))

2.png

3,剔除多列中重复出现的数据

处理数据时经常会出现数据冗余现象,这时需要提前剔除数据中冗余的数据(行中多列数据重复的现象),用到的函数为 drop_duplicates([‘列名1’,‘列名2’])函数

这里 去除的是 item_name、quantity、choice_description 三列中同时重复的数据:

chipo_filtered = chipo.drop_duplicates(['item_name','quantity','choice_description'])
chipo_filtered

4.png

4,条件筛选

1,筛选出 quantity 值为1的数据:

chipo_one_prod = chipo_filtered[chipo_filtered.quantity==1]
chipo_one_prod

6.png

2,在1的基础上,筛选出 item_price大于10 的数据,并利用 nunique 查看 item_name 不重复的数据个数:

chipo_one_prod[chipo_one_prod['item_price']>10].item_name.nunique()


# 输出结果
# 25 

3,2 中的条件筛选也可用 语句进行筛选:

chipo.query("item_price>10")

5.png

4,多条件筛选数据,筛选出同时满足 item_name 为 Chicken Bowl 和 quantity 为1的数据

chipo[(chipo['item_name']=='Chicken Bowl')&(chipo['quantity']==1)]

6.png

5,4 中用的 &(与) 衔接条件语句,这里尝试以下 |(或):

需满足 item_name 不为Chicken Bowl 或者 quantity 为1的数据

chipo[(chipo['item_name']!='Chicken Bowl')|(chipo['quantity']!=1)]

huo.png

4,对指定列数据排序

1,对某一列数据排序,最终结果只展示排序后这一列的结果,命令语句:data.列名.sort_values() ,例如这里以 item_name 这一列数据进行排序:

chipo.item_name.sort_values()# Sorting the values

15.png

2,而 data.sort_values(by=列名) 是以某列数据进行排序,对应其他列数据下也需要位置改变,最终展示的排序后的全部数据

chipo.sort_values(by = 'item_name')

7.png

3,2中的进阶应用,例如,这里我想看数据中价格最贵的商品名称,这里先用2的方法 对 item_price 进行逆排,然后提取排序后数据第一行的item_name

chipo.sort_values(by = 'item_price',ascending = False).head(1).item_name

# 打印结果
# 3598    Chips and Fresh Tomato Salsa
Name: item_name, dtype: object

**5,data.loc 方法筛选数据 **

注意一下:利用data.loc 方法筛选数据时,只能以 行名、列名作为筛选条件

1,筛选出 行名为2、3,列名为 quantity、item_name、item_price的数据

chipo.loc[[2,3],['quantity','item_name','item_price']]

8.png

2,对行名不做限制,只筛选出列名为quantity、item_name 数据

chipo.loc[:,['quantity','item_name']]

9.png

3,对列名不做限制,只筛选出行名为5、6的 数据

chipo.loc[[5,6],:]

10.png

4,综合应用筛选出:行名能被8整除、列名为 item_price、item_name 的两列数据

chipo.loc[chipo.index%8==0,['item_name','item_price']]

14.png

6,data.iloc 方法筛选数据

data.iloc 与 data.loc 方法想法,只能以索引值进行晒选,不能以列名、行名作为筛选条件

1,筛选出第 5-8行、2-3 列的数据

chipo.iloc[4:8,1:3]

11.png

2,筛选出第 2-4 行数据;

chipo.iloc[1:4,:]

12.png

3,筛选出前两列数据:

chipo.iloc[:,:2]

13.png

以上就时本篇文章的全部内容啦,对里面某些方法的应用不太熟悉的小伙伴们记得跟着代码敲一遍,加深下理解!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大飞1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值