[Pandas] 数据选择

Pandas常用的数据选择操作

操作

语法
选择列df['列名'] 或 df.列名
使用切片选择行df[5:10]
按索引选择行df.loc[label]
按数字索引选择行df.iloc[loc]
用表达式筛选行

df[bool_vec]

数据选择,即按照一定的条件对数据进行筛选,通过Pandas提供的方法可以模拟Excel对数据的筛选操作,可灵活应对各种数据的查询需求

1.选择列

import pandas as pd
 
df = pd.DataFrame([['liver','E',89,21,24,64],
                   ['Arry','C',36,37,37,57],
                   ['Ack','A',57,60,18,84],
                   ['Eorge','C',93,96,71,78],
                   ['Oah','D',65,49,61,86]
                  ], 
                   columns = ['name','team','Q1','Q2','Q3','Q4'])

# 以下两种方法会返回'name'列的数据,得到的数据类型为Series
res1 = df['name']
res2 = df.name
res3 = df.Q1
type(res3) # pandas.core.series.Series
#--------------------------------------------------------------------
print(res1 == res2)
# 输出结果:
# 0    True
# 1    True
# 2    True
# 3    True
# 4    True
# Name: name, dtype: bool
#--------------------------------------------------------------------

df

res1

res2

res3 

2.使用切片选择行(切片[])

我们可以像列表那样利用切片功能选择部分行的数据(索引值从0开始),但是不支持仅索引一条数据,需要注意的是,Pandas使用切片的逻辑与Python列表的逻辑一样,不包括右边的索引值

import pandas as pd
 
df = pd.DataFrame([['liver','E',89,21,24,64],
                   ['Arry','C',36,37,37,57],
                   ['Ack','A',57,60,18,84],
                   ['Eorge','C',93,96,71,78],
                   ['Oah','D',65,49,61,86]
                  ], 
                   columns = ['name','team','Q1','Q2','Q3','Q4'])

# 前两行数据
res1 = df[:2]
# 后两行数据
res2 = df[3:]
# 所有数据(不推荐)
res3 = df[:]
# 按步长取
res4 = df[:5:2]
# 反转顺序
res5 = df[::-1]
# 报错
res6 = df[2]

df

res1

res2

res3

res4

res5 

如果切片里是一个列名组成的列表(形式: df[['列名','列名',...]]),则可以筛选出多列数据 

import pandas as pd
 
df = pd.DataFrame([['liver','E',89,21,24,64],
                   ['Arry','C',36,37,37,57],
                   ['Ack','A',57,60,18,84],
                   ['Eorge','C',93,96,71,78],
                   ['Oah','D',65,49,61,86]
                  ], 
                   columns = ['name','team','Q1','Q2','Q3','Q4'])

# 筛选'name','team'两列数据
res = df[['name','team']]

# 需要区别的是,如果只有一列(格式: df[['列名']]),则会是一个DataFrame:
res1 = df[['name']]
type(res1) # pandas.core.frame.DataFrame

res2 = df['name']
type(res2) # pandas.core.series.Series

df

res

res1

res2 

3.按索引选择行(按轴标签.loc)

loc: works on labels in the index

按轴标签.lochttps://blog.csdn.net/Hudas/article/details/123096447?spm=1001.2014.3001.5502

4.按数字索引选择行(按数字索引.iloc)

iloc: works on the positions in the index(so it only takes integers)

按数字索引.ilochttps://blog.csdn.net/Hudas/article/details/123096447?spm=1001.2014.3001.5502

5.用表达式筛选行

import pandas as pd
 
df = pd.DataFrame([['liver','E',89,21,24,64],
                   ['Arry','C',36,37,37,57],
                   ['Ack','A',57,60,18,84],
                   ['Eorge','C',93,96,71,78],
                   ['Oah','D',65,49,61,86]
                  ], 
                   columns = ['name','team','Q1','Q2','Q3','Q4'])
# Q1等于36
res1 = df[df['Q1'] == 36]
# Q1不等于36
res2 = df[~(df['Q1'] == 36)]
# 姓名为'Eorge'
res3 = df[df['name'] == 'Eorge']
# 筛选Q1大于Q2的行记录
res4 = df[df.Q1 > df.Q2]

df

res1

res2

res3

res4 


美图欣赏2022/06/24
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值