本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用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》翻译整理
—————-————————————-
唯一值、计数和集合成员属性方法主要有以下几种:
方法 |
说明 |
isin | 计算Series中每个值是否包含在传入序列中 |
get_indexer | 计算数组中每个值的整数索引(根据提供的索引数组的索引值),形成一个唯一值数组,有助于数据的对齐和join类型的操作 |
unique | 计算Series值的唯一值数组,按照观察顺序返回 |
value_counts | 返回一个Series,索引时唯一值序列,值是计数个数,并按照个数数量降序排列 |
1.unique()方法:
unique()
方法会给出Series对象中的唯一值。返回的唯一值顺序为随机的,如果需要排序需使用之前介绍的sort()
方法。
1>>> obj = pd.Series(['a','c','a','d','a','b','b','c','c'])
2>>> obj
30 a
41 c
52 a
63 d
74 a
85 b
96 b
107 c
118 c
12dtype: object
13
14>>> res = obj.unique()
15>>> res
16array(['a', 'c', 'd', 'b'], dtype=object)
17
18# 将返回的唯一值进行排序操作
19>>> res.sort()
20>>> res
21array(['a', 'b', 'c', 'd'], dtype=object)
2.value_counts()方法:
value_counts()
方法用于计算Series中包含的值的频数。返回值会按照值的数量进行降序排列。
1>>> obj.value_counts()
2a 3
3c 3
4b 2
5d 1
6dtype: int64
value_counts()
方法也是有效的pandas顶层方法,可以用于任意数组或序列。
1# Series类型
2>>> pd.value_counts(obj ,sort=False)
3a 3
4c 3
5b 2
6d 1
7dtype: int64
8
9# numpy.ndarray类型
10>>> pd.value_counts(obj.to_numpy())
11a 3
12c 3
13d 1
14b 2
15dtype: int64
3.isin()方法:
isin()
方法用于执行向量化的成员属性检查。
1>>> mask = obj.isin(["b","c"])
2>>> mask
30 False
41 True
52 False
63 False
74 False
85 True
96 True
107 True
118 True
12dtype: bool
还可以将数据集以Series或DataFrame一列的形式过滤为数据集的值子集。
1>>> obj[mask]
21 c
35 b
46 b
57 c
68 c
7dtype: object
4.Index.get_indexer()方法:
Index.get_indexer()
方法可以提供一个索引数组,这个索引数组可以将非唯一数组转换为另一个非唯一值的数组(根据提供的索引数组的索引值)。
当值不在索引数组中时,返回-1。
1>>> unique_s = pd.Series(['a','b','c'])
2>>> unique_s
30 a
41 b
52 c
6dtype: object
7
8>>> pd.Index(unique_s).get_indexer(obj)
9array([ 0, 2, 0, -1, 0, 1, 1, 2, 2], dtype=int64)
5.DataFrame数据类型的相关计算:
在某些情况下,可能需要计算 DataFrame 中多个相关列的直方图。
例如:
1>>> df = pd.DataFrame({'列1':[1,3,4,3,4],'列2':[2,3,1,2,3],'列3':[1,5,2,4,4]},index=["a","b","c","d","e"])
2>>> df
3 列1 列2 列3
4a 1 2 1
5b 3 3 5
6c 4 1 2
7d 3 2 4
8e 4 3 4
通过上面的方式,我们可以计算单个列的值计数:
1>>> df["列2"].value_counts()
22 2
33 2
41 1
5Name: 列2, dtype: int64
要对所有列进行计算,需要将 pandas.value_counts 传递给 DataFrame 的 apply 方法。
结果中的行标签是所有列中出现的不同值。这些值是每列中这些值的相应计数。
1>>> df.apply(pd.value_counts)
2 列1 列2 列3
31 1.0 1.0 1.0
42 NaN 2.0 1.0
53 2.0 2.0 NaN
64 2.0 NaN 2.0
75 NaN NaN 1.0
8
9>>> df.apply(pd.value_counts).fillna(0)
10 列1 列2 列3
111 1.0 1.0 1.0
122 0.0 2.0 1.0
133 2.0 2.0 0.0
144 2.0 0.0 2.0
155 0.0 0.0 1.0
另外,还有一个 DataFrame.value_counts 方法,但它计算计数时将 DataFrame 的每一行视为一个元组,以确定每个不同行的出现次数:
1>>> df = pd.DataFrame({'列1':[1,3,4,3,4],'列2':[2,3,1,2,3]},index=["a","b","c","d","e"])
2>>> df
3 列1 列2
4a 1 2
5b 3 3
6c 4 1
7d 3 2
8e 4 3
9
10>>> df.value_counts()
11列1 列2
121 2 1
133 2 1
14 3 1
154 1 1
16 3 1
17dtype: int64
本篇文章来源于微信公众号: 码农设计师