Zaoqi's Blog -> Python数据分析教程 -> 图解Pandas ->
数据筛选
数据筛选¶
在线刷题
检查 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 | 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 |
组合筛选¶
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 |
On this page