首页Python【Python数据分析】2...

【Python数据分析】25.唯一值、计数及成员属性


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Data_Analysis/lab/index.html
链接: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: 列2dtype: 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()
111  列2
121   2     1
133   2     1
14    3     1
154   1     1
16    3     1
17dtype: int64

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments