本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Data_Analysis/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接:https://pan.baidu.com/s/1MYkeYeVAIRqbxezQECHwcA?pwd=mnsj
提取码:mnsj
-
前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Data_Analysis
根据《Python for Data Analysis 3rd Edition》翻译整理
—————-————————————-
1.排序(Sorting):
按某种标准对数据集进行排序是Pandas另一个重要的内置操作。
如果需要按行或列索引进行字典型排序,需要使用sort_index()或
sort_values()方法,两个方法均返回一个新的、排序好的对象:
1.1sort_index()
方法
-
Series类型
1>>> obj = pd.Series(np.arange(4), index=["d", "a", "b", "c"])
2>>> obj
3d 0
4a 1
5b 2
6c 3
7dtype: int32
8
9>>> obj.sort_index()
10a 1
11b 2
12c 3
13d 0
14dtype: int32
-
DataFrame类型
1>>> df = pd.DataFrame(np.arange(8).reshape((2, 4)),index=[3, 1],columns=["d", "a", "b", "c"])
2>>> df
3 d a b c
43 0 1 2 3
51 4 5 6 7
6
7>>> df.sort_index()
8 d a b c
91 4 5 6 7
103 0 1 2 3
通过设置 axis 参数,可以在指定轴上按索引进行排序。
1>>> df.sort_index(axis=1)
2 a b c d
33 1 2 3 0
41 5 6 7 4
默认情况下,数据按升序排序,通过设置ascending=False可以按降序排序。
1>>> df.sort_index(axis=1 , ascending=False)
2 d c b a
33 0 3 2 1
41 4 7 6 5
1.2sort_values()
方法
使用sort_values()方法按值进行排序。
-
Series类型
1>>> obj = pd.Series([4, 7, -3, 2])
2>>> obj
30 4
41 7
52 -3
63 2
7dtype: int64
8
9>>> obj.sort_values()
102 -3
113 2
120 4
131 7
14dtype: int64
如果有缺失值,默认排序在最后。也可以使用 na_position 选项将缺失值排序到开头。
1>>> obj = pd.Series([4, np.nan, 7, np.nan, -3, 2])
2>>> obj
30 4.0
41 NaN
52 7.0
63 NaN
74 -3.0
85 2.0
9dtype: float64
10
11>>> obj.sort_values()
124 -3.0
135 2.0
140 4.0
152 7.0
161 NaN
173 NaN
18dtype: float64
19
20>>> obj.sort_values(na_position='first')
211 NaN
223 NaN
234 -3.0
245 2.0
250 4.0
262 7.0
27dtype: float64
-
DataFrame类型
在对 DataFrame 进行排序时,可以使用一列或多列中的数据作为排序键。为此,需要将一个或多个列名(要按多列排序,请传递名称列表)传递给 sort_values。
1>>> df = pd.DataFrame({"b": [4, 7, -3, 2], "a": [0, 1, 0, 1]})
2>>> df
3 b a
40 4 0
51 7 1
62 -3 0
73 2 1
8
9>>> df.sort_values("b")
10 b a
112 -3 0
123 2 1
130 4 0
141 7 1
15
16>>> df.sort_values(by=["a", "b"])
17 b a
182 -3 0
190 4 0
203 2 1
211 7 1
2.排名(Ranking):
排名是对数组中有效数据点分配排名,从最低值开始。
默认情况下,rank 通过对每个组分配平均排名来打破平级关系。
2.1 Series类型
1>>> obj = pd.Series([7, -5, 7, 4, 2, 0, 4])
2>>> obj
30 7
41 -5
52 7
63 4
74 2
85 0
96 4
10dtype: int64
11
12>>> obj.rank()
130 6.5
141 1.0
152 6.5
163 4.5
174 3.0
185 2.0
196 4.5
20dtype: float64
默认情况下,数据按升序排序,通过设置ascending=False可以按降序排序。
1>>> obj.rank(ascending=False)
20 1.5
31 7.0
42 1.5
53 3.5
64 5.0
75 6.0
86 3.5
9dtype: float64
也可以根据在数据中的观察顺序进行排名。
打破平级关系的方法主要有以下几种:
方法 |
说明 |
“average” | 默认值,在每个组中分配平均排名 |
“min” | 对整个组使用最小排名 |
“max” | 对整个组使用最大排名 |
“first” |
按照值在数据中出现的次序分配排名 |
“dense” | 类似于 method=”min”,但是组之间的排名总是增加 1,而不是组中相等元素的数量 |
下面示例中,条目 0 和 2 没有使用平均排名 6.5,而是将它们设置为 6 和 7,这是因为数据中标签 0 在标签 2 之前。
1>>> obj.rank(method="first")
20 6.0
31 1.0
42 7.0
53 4.0
64 3.0
75 2.0
86 5.0
9dtype: float64
2.2 DataFrame类型
DataFrame 可以计算行或列的排名。
1>>> df = pd.DataFrame({"b": [4.3, 7, -3, 2], "a": [0, 1, 0, 1],"c": [-2, 5, 8, -2.5]})
2>>> df
3 b a c
40 4.3 0 -2.0
51 7.0 1 5.0
62 -3.0 0 8.0
73 2.0 1 -2.5
8
9>>> df.rank()
10 b a c
110 3.0 1.5 2.0
121 4.0 3.5 3.0
132 1.0 1.5 4.0
143 2.0 3.5 1.0
15
16>>> df.rank(axis=1)
17 b a c
180 3.0 2.0 1.0
191 3.0 1.0 2.0
202 1.0 2.0 3.0
213 3.0 2.0 1.0
本篇文章来源于微信公众号: 码农设计师