接上篇《57、Pandas入门指南:背景、应用场景与基本操作》
上一篇我们讲解了Pandas的背景以及应用场景与基本操作,本篇我们来讲解Pandas库中Series对象的基本概念和相关操作。
Pandas库中的Series对象是其核心数据结构之一,它在数据分析中扮演着重要的角色。Series可以视为一种带有标签的一维数组,能够高效地处理各种类型的数据。
首先,Series类似于一维数组,但与之不同的是,Series的每个元素都拥有一个标签,这些标签被称为“索引”(index)。这种标签化的特性使得Series在数据分析和处理中非常灵活和方便。
其次,Series可以存储多种类型的数据,包括但不限于整数(int)、浮点数(float)、字符串(str)、布尔值(bool)、Python对象等。这种数据类型的多样性使得Series能够处理各种复杂的数据集,并满足各种数据分析和处理的需求。
在Pandas中,Series对象具有许多实用的属性和方法,如索引(index)、数据(values)、数据类型(dtype)、形状(shape)等属性,以及切片、筛选、排序、运算等操作。这些属性和方法使得我们可以方便地对数据进行各种处理和分析。
此外,Series对象还可以与Pandas中的另一个核心数据结构——DataFrame进行交互。DataFrame是一个二维的、大小可变的、且可以包含异构类型列的表格型数据结构,而Series则可以被视为DataFrame的一列。因此,我们可以通过将Series对象嵌入到DataFrame中,来实现更复杂的数据处理和分析任务。
总之,Pandas库中的Series对象是一种强大而灵活的数据结构,它不仅能够存储多种类型的数据,而且具有许多实用的属性和方法,可以帮助我们高效地进行数据分析和处理。在接下来的内容中,我们将详细介绍Series对象的创建、基本属性、数据操作、运算等方面的内容,并通过案例实践来展示其应用。
在Pandas库中,Series对象可以通过多种方式创建。这些方式主要基于Python中常见的数据结构,如列表、字典、NumPy数组等。以下是几种常见的创建Series对象的方法:
当我们有一个包含数据的列表,并且想要将其转换为一个带有索引的Series对象时,可以直接使用Pandas的Series()函数。默认情况下,列表中的元素会成为Series的数据,而索引则会自动从0开始递增。
- import pandas as pd
-
- data = [1, 2, 3, 4, 5]
- s = pd.Series(data)
- print(s)
- # 输出:
- # 0 1
- # 1 2
- # 2 3
- # 3 4
- # 4 5
- # dtype: int64
如果希望自定义索引,可以传递一个额外的参数index给Series()函数。
- index = ['a', 'b', 'c', 'd', 'e']
- s = pd.Series(data, index=index)
- print(s)
- # 输出:
- # a 1
- # b 2
- # c 3
- # d 4
- # e 5
- # dtype: int64
字典是Python中用于存储键值对的数据结构。在创建Series时,字典的键会被用作索引,而值则成为数据。
- dict_data = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
- s = pd.Series(dict_data)
- print(s)
- # 输出:
- # a 1
- # b 2
- # c 3
- # d 4
- # e 5
- # dtype: int64
如果字典的键不是唯一的,Pandas会保留最后一个出现的值。
NumPy是Python中用于科学计算的库,它提供了高效的数组和矩阵运算。当我们有一个NumPy数组时,可以直接将其传递给Series()函数来创建一个Series对象。
- import numpy as np
-
- np_data = np.array([1, 2, 3, 4, 5])
- s = pd.Series(np_data)
- print(s)
- # 输出:
- # 0 1
- # 1 2
- # 2 3
- # 3 4
- # 4 5
- # dtype: int64
同样,我们也可以指定索引。
- index = ['a', 'b', 'c', 'd', 'e']
- s = pd.Series(np_data, index=index)
- print(s)
- # 输出:
- # a 1
- # b 2
- # c 3
- # d 4
- # e 5
- # dtype: int64
如果我们想创建一个所有元素都相同的Series,可以传递一个标量值(如整数、浮点数、字符串等)给Series()函数,并指定索引的长度。
- index = ['a', 'b', 'c', 'd', 'e']
- s = pd.Series(1, index=index)
- print(s)
- # 输出:
- # a 1
- # b 1
- # c 1
- # d 1
- # e 1
- # dtype: int64
Pandas还支持从其他数据结构(如CSV文件、Excel文件、SQL数据库等)中读取数据并创建Series对象。这通常涉及到使用Pandas的read_csv()、read_excel()等函数,但这些内容超出了本节的讨论范围。
总之,Pandas提供了多种灵活的方式来创建Series对象,使得我们能够方便地将各种类型的数据转换为Pandas的数据结构进行后续处理和分析。
Series对象在Pandas库中提供了多种基本属性,这些属性帮助我们快速获取关于数据序列的重要信息。以下是Series对象的一些基本属性及其描述:
index属性用于获取Series对象的索引标签。这些标签默认是整数,从0开始递增,但也可以在创建Series时自定义。
- import pandas as pd
-
- s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
- print(s.index)
- # 输出: Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
values属性返回一个NumPy数组,其中包含Series中的数据。这个属性提供了对数据的直接访问,允许我们使用NumPy的函数和方法来操作数据。
- s = pd.Series([1, 2, 3, 4, 5])
- print(s.values)
- # 输出: array([1, 2, 3, 4, 5])
dtype属性用于获取Series中数据的数据类型。Pandas会根据数据的内容自动推断数据类型,如整数、浮点数、字符串等。
- s = pd.Series(['a', 'b', 'c', 'd', 'e'])
- print(s.dtype)
- # 输出: dtype('O') # 注意:'O'表示对象类型,通常用于存储字符串
-
- s = pd.Series([1, 2, 3, 4, 5])
- print(s.dtype)
- # 输出: dtype('int64')
shape属性返回一个元组,表示Series的维度。对于Series来说,它总是返回一个包含一个元素的元组,表示数据的长度。
- s = pd.Series([1, 2, 3, 4, 5])
- print(s.shape)
- # 输出: (5,)
size属性返回Series中元素的数量,即数据的长度。这个属性是一个整数,等价于len(series)。
- s = pd.Series([1, 2, 3, 4, 5])
- print(s.size)
- # 输出: 5
name属性用于获取或设置Series的名称。这个属性通常用于在DataFrame中标识不同的列。
- s = pd.Series([1, 2, 3, 4, 5], name='example')
- print(s.name)
- # 输出: example
-
- s.name = 'new_name'
- print(s.name)
- # 输出: new_name
axes属性返回一个包含Series索引的列表。对于Series来说,它只包含一个索引轴。
- s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
- print(s.axes)
- # 输出: [Index(['a', 'b', 'c', 'd', 'e'], dtype='object')]
nbytes属性返回Series对象在内存中占用的字节数。这个属性对于了解数据集的内存使用情况很有用。
- s = pd.Series([1, 2, 3, 4, 5])
- print(s.nbytes)
- # 输出会根据Series的数据类型和大小有所不同
Series的头部和尾部数据查看,使用head()、tail()函数:
- import pandas as pd
-
- data = [1,2,3,4,5]
- s = pd.Series(data)
- print("[头部第一个数据]\n", s.head(1))
- print("[尾部后两个数据]\n", s.tail(2))
- # 输出:
- # [头部第一个数据]
- # 0 1
- # dtype: int64
- # [尾部后两个数据]
- # 3 4
- # 4 5
这些基本属性为我们提供了关于Series对象的重要信息,使我们能够更好地理解和操作数据。
Pandas的Series对象提供了丰富的数据操作方法,这些方法使得我们可以轻松地对数据进行各种处理和分析。以下是Series对象的一些常用数据操作方法:
Series对象支持基于标签的索引和基于位置的切片操作。我们可以使用索引标签来访问单个元素或子集,也可以使用切片语法来访问连续的元素范围。
- import pandas as pd
-
- s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
-
- # 基于标签的索引
- print(s['a']) # 输出: 1
-
- # 基于位置的切片
- print(s[1:4]) # 输出: b 2
- # c 3
- # d 4
- # dtype: int64
Series对象是可变的,我们可以直接修改其元素的值。
- s['a'] = 10
- print(s) # 输出: a 10
- # b 2
- # c 3
- # d 4
- # e 5
- # dtype: int64
Series对象支持常见的算术运算,如加法、减法、乘法、除法等。这些运算可以在Series之间、Series与标量之间进行。
- s1 = pd.Series([1, 2, 3, 4, 5])
- s2 = pd.Series([10, 20, 30, 40, 50])
-
- # Series之间的加法
- print(s1 + s2) # 输出: 0 11
- # 1 22
- # 2 33
- # 3 44
- # 4 55
- # dtype: int64
-
- # Series与标量的加法
- print(s1 + 1) # 输出: 0 2
- # 1 3
- # 2 4
- # 3 5
- # 4 6
- # dtype: int64
Series对象还支持比较运算,如等于、不等于、大于、小于等。这些运算的结果是一个布尔型的Series对象。
- print(s1 > 2) # 输出: 0 False
- # 1 False
- # 2 True
- # 3 True
- # 4 True
- # dtype: bool
使用sort_values()方法可以对Series对象进行排序。默认情况下,数据按升序排序,但也可以指定ascending=False进行降序排序。
- s = pd.Series([5, 1, 4, 2, 3])
- print(s.sort_values()) # 输出: 0 1
- # 3 2
- # 4 3
- # 2 4
- # 1 5
- # dtype: int64
使用unique()方法可以获取Series对象中的唯一值,而value_counts()方法则可以计算每个唯一值出现的次数。
- s = pd.Series(['cat', 'dog', 'cat', 'elephant', 'elephant', 'dog'])
- print(s.unique()) # 输出: array(['cat', 'dog', 'elephant'], dtype=object)
- print(s.value_counts()) # 输出: elephant 2
- # cat 2
- # dog 2
- # dtype: int64
使用map()方法可以将Series中的每个元素映射到另一个值。这通常与字典一起使用,字典的键是原始值,值是映射后的值。
- s = pd.Series(['cat', 'dog', 'elephant'])
- mapping = {'cat': 'kitten', 'dog': 'puppy', 'elephant': 'baby elephant'}
- print(s.map(mapping)) # 输出: 0 kitten
- # 1 puppy
- # 2 baby elephant
- # dtype: object
如果Series对象包含字符串类型的数据,那么可以调用字符串方法来处理这些数据。Pandas会自动将方法应用于每个元素。以下是一个例子,使用str.replace()方法将Series对象中每一个'a'替换为'b':
- import pandas as pd
-
- # 创建一个包含字符串的Series对象
- s = pd.Series(['apple', 'banana', 'cat', 'data', 'elephant'])
-
- # 使用str.replace()方法将'a'替换为'b'
- s_replaced = s.str.replace('a', 'b')
-
- print(s_replaced)
- # 输出:
- # 0 bpple
- # 1 bbnbnb
- # 2 cbt
- # 3 dbtb
- # 4 elephant
- # dtype: object
关于Series对象操作的第一部分介绍完毕。下一篇我们继续学习Series对象的运算、函数用于、时间序列操作,以及Series的案例实践。
转载请注明出处:https://guangzai.blog.csdn.net/article/details/139723986