数据筛选

在线刷题

检查 or 强化 Pandas 数据分析操作?👉在线体验「Pandas进阶修炼300题」

Note

本页面代码可以在线编辑、执行

本页数据说明

为了更好的介绍相关操作,本页面使用 东京奥运会奖牌数据 数据进行展开,你应该对数据字段、数值、类型等相关信息做一个大致了解!

import pandas as pd

df = pd.read_csv("东京奥运会奖牌数据.csv")

df.rename(columns={'Unnamed: 2':'金牌数',
                  'Unnamed: 3':'银牌数',
                  'Unnamed: 4':'铜牌数'},inplace=True)

筛选列

通过列号

提取第 1、2、3、4 列

df.iloc[:,[0,1,2,3]]
排名 国家奥委会 金牌数 银牌数
0 1 美国 39 41
1 2 中国 38 32
2 3 日本 27 14
3 4 英国 22 21
4 5 ROC 20 28
... ... ... ... ...
88 86 加纳 0 0
89 86 格林纳达 0 0
90 86 科威特 0 0
91 86 摩尔多瓦 0 0
92 86 叙利亚 0 0

93 rows × 4 columns

通过列名

提取 金牌数、银牌数、铜牌数 三列

df[['金牌数','银牌数','铜牌数']]
金牌数 银牌数 铜牌数
0 39 41 33
1 38 32 18
2 27 14 17
3 22 21 22
4 20 28 23
... ... ... ...
88 0 0 1
89 0 0 1
90 0 0 1
91 0 0 1
92 0 0 1

93 rows × 3 columns

条件(列号)

筛选全部 奇数列

df.iloc[:,[i%2==1 for i in range(len(df.columns))]]
国家奥委会 银牌数 总分 国家奥委会代码
0 美国 41 113 USA
1 中国 32 88 CHN
2 日本 14 58 JPN
3 英国 21 65 GBR
4 ROC 28 71 ROC
... ... ... ... ...
88 加纳 0 1 GHA
89 格林纳达 0 1 GRN
90 科威特 0 1 KUW
91 摩尔多瓦 0 1 MDA
92 叙利亚 0 1 SYR

93 rows × 4 columns

条件(列名)

提取全部列名中包含 数 的列

df.loc[:, df.columns.str.endswith('数')]
金牌数 银牌数 铜牌数
0 39 41 33
1 38 32 18
2 27 14 17
3 22 21 22
4 20 28 23
... ... ... ...
88 0 0 1
89 0 0 1
90 0 0 1
91 0 0 1
92 0 0 1

93 rows × 3 columns

组合(行号+列名)

提取倒数后三列的10-20行

df.loc[10:20, '总分':] 
总分 按总数排名 国家奥委会代码
10 24 11 CAN
11 21 12 BRA
12 20 13 NZL
13 15 18 CUB
14 20 13 HUN
15 20 13 KOR
16 14 19 POL
17 11 23 CZE
18 10 25 KEN
19 8 29 NOR
20 9 26 JAM

筛选行

通过行号

提取第 10 行

df.loc[9:9]
排名 国家奥委会 金牌数 银牌数 铜牌数 总分 按总数排名 国家奥委会代码
9 10 意大利 10 10 20 40 7 ITA

通过行号(多行)

提取第 10 行之后的全部行

df.loc[9:]
排名 国家奥委会 金牌数 银牌数 铜牌数 总分 按总数排名 国家奥委会代码
9 10 意大利 10 10 20 40 7 ITA
10 11 加拿大 7 6 11 24 11 CAN
11 12 巴西 7 6 8 21 12 BRA
12 13 新西兰 7 6 7 20 13 NZL
13 14 古巴 7 3 5 15 18 CUB
... ... ... ... ... ... ... ... ...
88 86 加纳 0 0 1 1 77 GHA
89 86 格林纳达 0 0 1 1 77 GRN
90 86 科威特 0 0 1 1 77 KUW
91 86 摩尔多瓦 0 0 1 1 77 MDA
92 86 叙利亚 0 0 1 1 77 SYR

84 rows × 8 columns

固定间隔

提取 0-50 行,间隔为 3

df[:50:3]
排名 国家奥委会 金牌数 银牌数 铜牌数 总分 按总数排名 国家奥委会代码
0 1 美国 39 41 33 113 1 USA
3 4 英国 22 21 22 65 4 GBR
6 7 荷兰 10 12 14 36 9 NED
9 10 意大利 10 10 20 40 7 ITA
12 13 新西兰 7 6 7 20 13 NZL
15 16 韩国 6 4 10 20 13 KOR
18 19 肯尼亚 4 4 2 10 25 KEN
21 22 西班牙 3 8 6 17 17 ESP
24 25 丹麦 3 4 4 11 23 DEN
27 28 塞尔维亚 3 1 5 9 26 SRB
30 31 斯洛文尼亚 3 1 1 5 42 SLO
33 34 中华台北 2 4 6 12 22 TPE
36 36 乌干达 2 1 1 4 47 UGA
39 39 以色列 2 0 2 4 47 ISR
42 42 科索沃 2 0 0 2 66 KOS
45 46 罗马尼亚 1 3 0 4 47 ROU
48 49 中国香港 1 2 3 6 39 HKG

判断(大于)

提取 金牌数 大于 30 的行

df[df['金牌数'] > 30]
排名 国家奥委会 金牌数 银牌数 铜牌数 总分 按总数排名 国家奥委会代码
0 1 美国 39 41 33 113 1 USA
1 2 中国 38 32 18 88 2 CHN

判断(等于)

提取 金牌数 等于 10 的行

df.loc[df['金牌数'] == 10]
排名 国家奥委会 金牌数 银牌数 铜牌数 总分 按总数排名 国家奥委会代码
6 7 荷兰 10 12 14 36 9 NED
7 8 法国 10 12 11 33 10 FRA
8 9 德国 10 11 16 37 8 GER
9 10 意大利 10 10 20 40 7 ITA

判断(不等于)

提取 金牌数 不等于 10 的行

df.loc[~(df['金牌数'] == 10)]
排名 国家奥委会 金牌数 银牌数 铜牌数 总分 按总数排名 国家奥委会代码
0 1 美国 39 41 33 113 1 USA
1 2 中国 38 32 18 88 2 CHN
2 3 日本 27 14 17 58 5 JPN
3 4 英国 22 21 22 65 4 GBR
4 5 ROC 20 28 23 71 3 ROC
... ... ... ... ... ... ... ... ...
88 86 加纳 0 0 1 1 77 GHA
89 86 格林纳达 0 0 1 1 77 GRN
90 86 科威特 0 0 1 1 77 KUW
91 86 摩尔多瓦 0 0 1 1 77 MDA
92 86 叙利亚 0 0 1 1 77 SYR

89 rows × 8 columns

条件(指定行号)

提取全部 奇数行

df[[i%2==1 for i in range(len(df.index))]]
排名 国家奥委会 金牌数 银牌数 铜牌数 总分 按总数排名 国家奥委会代码
1 2 中国 38 32 18 88 2 CHN
3 4 英国 22 21 22 65 4 GBR
5 6 澳大利亚 17 7 22 46 6 AUS
7 8 法国 10 12 11 33 10 FRA
9 10 意大利 10 10 20 40 7 ITA
11 12 巴西 7 6 8 21 12 BRA
13 14 古巴 7 3 5 15 18 CUB
15 16 韩国 6 4 10 20 13 KOR
17 18 捷克 4 4 3 11 23 CZE
19 20 挪威 4 2 2 8 29 NOR
21 22 西班牙 3 8 6 17 17 ESP
23 24 瑞士 3 4 6 13 20 SUI
25 26 克罗地亚 3 3 2 8 29 CRO
27 28 塞尔维亚 3 1 5 9 26 SRB
29 30 保加利亚 3 1 2 6 39 BUL
31 32 乌兹别克斯坦 3 0 2 5 42 UZB
33 34 中华台北 2 4 6 12 22 TPE
35 36 希腊 2 1 1 4 47 GRE
37 38 厄瓜多尔 2 1 0 3 60 ECU
39 39 以色列 2 0 2 4 47 ISR
41 42 巴哈马 2 0 0 2 66 BAH
43 44 乌克兰 1 6 12 19 16 UKR
45 46 罗马尼亚 1 3 0 4 47 ROU
47 48 印度 1 2 4 7 33 IND
49 50 菲律宾 1 2 1 4 47 PHI
51 52 南非 1 2 0 3 60 RSA
53 54 埃及 1 1 4 6 39 EGY
55 56 埃塞俄比亚 1 1 2 4 47 ETH
57 58 突尼斯 1 1 0 2 66 TUN
59 59 斐济 1 0 1 2 66 FIJ
61 59 泰国 1 0 1 2 66 THA
63 63 摩洛哥 1 0 0 1 77 MAR
65 66 哥伦比亚 0 4 1 5 42 COL
67 68 多米尼加 0 3 2 5 42 DOM
69 70 吉尔吉斯斯坦 0 2 1 3 60 KGZ
71 72 阿根廷 0 1 2 3 60 ARG
73 74 约旦 0 1 1 2 66 JOR
75 74 尼日利亚 0 1 1 2 66 NGR
77 77 沙特阿拉伯 0 1 0 1 77 KSA
79 77 北马其顿 0 1 0 1 77 MKD
81 77 土库曼斯坦 0 1 0 1 77 TKM
83 84 墨西哥 0 0 4 4 47 MEX
85 86 博茨瓦纳 0 0 1 1 77 BOT
87 86 科特迪瓦 0 0 1 1 77 CIV
89 86 格林纳达 0 0 1 1 77 GRN
91 86 摩尔多瓦 0 0 1 1 77 MDA

条件(指定值)

提取 中国、美国、英国、日本、巴西五行数据

df.loc[df['国家奥委会'].isin(['中国','美国','英国','日本','巴西'])]
排名 国家奥委会 金牌数 银牌数 铜牌数 总分 按总数排名 国家奥委会代码
0 1 美国 39 41 33 113 1 USA
1 2 中国 38 32 18 88 2 CHN
2 3 日本 27 14 17 58 5 JPN
3 4 英国 22 21 22 65 4 GBR
11 12 巴西 7 6 8 21 12 BRA

多条件

在上一题的条件下,新增一个条件:金牌数小于30

df.loc[(df['金牌数'] < 30) & (df['国家奥委会'].isin(['中国','美国','英国','日本','巴西']))]
排名 国家奥委会 金牌数 银牌数 铜牌数 总分 按总数排名 国家奥委会代码
2 3 日本 27 14 17 58 5 JPN
3 4 英国 22 21 22 65 4 GBR
11 12 巴西 7 6 8 21 12 BRA

条件(包含指定值)

提取 国家奥委会 列中,所有包含 的行

df[df.国家奥委会.str.contains('国')]
排名 国家奥委会 金牌数 银牌数 铜牌数 总分 按总数排名 国家奥委会代码
0 1 美国 39 41 33 113 1 USA
1 2 中国 38 32 18 88 2 CHN
3 4 英国 22 21 22 65 4 GBR
7 8 法国 10 12 11 33 10 FRA
8 9 德国 10 11 16 37 8 GER
15 16 韩国 6 4 10 20 13 KOR
48 49 中国香港 1 2 3 6 39 HKG
61 59 泰国 1 0 1 2 66 THA

组合筛选

筛选某行某列

提取 0 行第 2

df.iloc[0:1,[1]]
国家奥委会
0 美国

筛选多行多列

提取 第 0-2 行第 0-2 列

df.iloc[0:2,[0,1]]
排名 国家奥委会
0 1 美国
1 2 中国

组合(行号+列号)

提取第 4 行,第 4 列的值

df.iloc[3,3]
21

组合(行号+列名)

提取行索引为 4 ,列名为 金牌数 的值

df.at[4,'金牌数']
20

条件

提取 国家奥委会 为 中国 的金牌数

df.loc[df['国家奥委会'] == '中国'].loc[1].at['金牌数']
38

query

使用 query 提取 金牌数 + 银牌数 大于 15 的国家

df.query('金牌数+银牌数 > 15')
排名 国家奥委会 金牌数 银牌数 铜牌数 总分 按总数排名 国家奥委会代码
0 1 美国 39 41 33 113 1 USA
1 2 中国 38 32 18 88 2 CHN
2 3 日本 27 14 17 58 5 JPN
3 4 英国 22 21 22 65 4 GBR
4 5 ROC 20 28 23 71 3 ROC
5 6 澳大利亚 17 7 22 46 6 AUS
6 7 荷兰 10 12 14 36 9 NED
7 8 法国 10 12 11 33 10 FRA
8 9 德国 10 11 16 37 8 GER
9 10 意大利 10 10 20 40 7 ITA

query(引用变量)

使用 query 提取 金牌数 大于 金牌均值的国家

gold_mean = df['金牌数'].mean()
df.query(f'金牌数 > {gold_mean}')
排名 国家奥委会 金牌数 银牌数 铜牌数 总分 按总数排名 国家奥委会代码
0 1 美国 39 41 33 113 1 USA
1 2 中国 38 32 18 88 2 CHN
2 3 日本 27 14 17 58 5 JPN
3 4 英国 22 21 22 65 4 GBR
4 5 ROC 20 28 23 71 3 ROC
5 6 澳大利亚 17 7 22 46 6 AUS
6 7 荷兰 10 12 14 36 9 NED
7 8 法国 10 12 11 33 10 FRA
8 9 德国 10 11 16 37 8 GER
9 10 意大利 10 10 20 40 7 ITA
10 11 加拿大 7 6 11 24 11 CAN
11 12 巴西 7 6 8 21 12 BRA
12 13 新西兰 7 6 7 20 13 NZL
13 14 古巴 7 3 5 15 18 CUB
14 15 匈牙利 6 7 7 20 13 HUN
15 16 韩国 6 4 10 20 13 KOR
16 17 波兰 4 5 5 14 19 POL
17 18 捷克 4 4 3 11 23 CZE
18 19 肯尼亚 4 4 2 10 25 KEN
19 20 挪威 4 2 2 8 29 NOR
20 21 牙买加 4 1 4 9 26 JAM