在数据科学的世界中,数据处理和分析是不可或缺的一环。Pandas,作为Python中用于数据处理和分析的强大库,为我们提供了便捷、高效的数据结构以及丰富的数据处理功能。
Pandas的核心是两大数据结构:Series和DataFrame。这篇我们主要介绍一下Series的创建以及Series的各种属性和方法。
Series可以看作是一维的标签化数组,能够保存任何数据类型的数据,并带有标签(索引),使得我们可以轻松地访问和操作数据。

一、Series概述

  • Series是pandas库中的一个一维标签化数组对象。

  • 它可以保存任何数据类型的数据,如整数、浮点数、字符串、Python对象等,并且每个元素都带有一个标签(索引)。这个标签通常用于数据的定位和选取。

  • Series可以看作是一个字典与一维NumPy数组的结合体,它包含了一系列数据值以及与之相关联的数据标签(索引)。这些索引可以是整数,也可以是字符串或其他数据类型。通过索引,我们可以方便地对Series中的数据进行访问、修改和删除等操作。

  • 在数据分析和处理中,Series是非常有用的数据结构,它可以用于表示一列数据(如一个班级的成绩列表)或者具有相同属性的多个数据点(如一组股票的价格数据)。通过Series,我们可以对数据进行高效的操作和分析,从而发现数据中的规律和趋势。

  • 总之,Series是pandas库中一个非常重要的数据结构,它为我们提供了一种方便、灵活的方式来处理和分析一维数据。

二、Series 的属性

1.values:返回Series中的值数组,类型为ndarray。

这可以提供一个包含Series中所有元素的NumPy数组。

2.index:返回Series中的索引数组,类型为Index。

索引可以是任何类型,包括整数、标签、日期等,用于数据的定位和选取。

3.dtype:返回Series中元素的数据类型。

这可以帮助你了解Series中存储的数据类型,例如整数、浮点数、字符串等。

4.name:返回Series的名称。

Series对象可以有一个与之关联的名称,这可以用于标识或描述该Series。

5.ndim:返回Series的维度,固定为1。

因为Series是一维的,所以这个属性的值始终是1。

6.shape:返回Series中数据的形状。

固定为(n,),其中n表示Series的长度。这可以告诉你Series中有多少个元素。

7.size:返回Series中元素的数量。

等同于len(series)。这也是获取Series长度的一种方式。

8.empty:返回一个布尔值,表示Series是否为空。

如果Series没有任何元素,该属性将返回True。

import pandas as pd  
  
# 创建一个简单的Series对象  
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])  
  
# 访问Series的值  
print("Values:", s.values)  
  
# 访问Series的索引  
print("Index:", s.index)  
  
# 查看Series的数据类型  
print("Data type:", s.dtype)  
  
# 获取Series的名称(如果没有设置名称,则返回None)  
print("Name:", s.name)  
  
# 查看Series的维度  
print("Dimension:", s.ndim)  
  
# 查看Series的形状  
print("Shape:", s.shape)  
  
# 获取Series中元素的数量  
print("Size:", s.size)  
  
# 检查Series是否为空  
print("Is empty:", s.empty)  
  
# 使用mean()方法计算Series的均值  
print("Mean:", s.mean())  
  
# 使用astype()方法改变Series的数据类型  
s_str = s.astype(str)  
print("Series with string dtype:", s_str)  
  
# 为Series设置名称  
s.name = 'MySeries'  
print("Series name:", s.name)


#运行结果
# Values: [1 2 3 4 5]
# Index: Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
# Data type: int64
# # Name: None
# Dimension: 1
# Shape: (5,)
# Size: 5
# Is empty: False
# Mean: 3.0
# Series with string dtype: a    1



三、Series 的创建

1.使用列表或数组创建Series

# 使用Python列表创建Series  
s1 = pd.Series([1, 2, 3, 4, 5])  
print(s1)  
 
# 使用NumPy数组创建Series  
import numpy as np  
s2 = pd.Series(np.array([10, 20, 30, 40]))  
print(s2)

运行结果
使用NumPy数组创建Series

2. 指定索引创建Series

# 使用列表和索引创建Series  
data = [1, 2, 3, 4, 5]  
index = ['a', 'b', 'c', 'd', 'e']  
s3 = pd.Series(data, index=index)  
print(s3)

运行结果
在这里插入图片描述

3. 使用字典创建Series

# 使用字典创建Series,字典的键作为索引,值作为数据  
dict_data = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}  
s4 = pd.Series(dict_data)  
print(s4)

运行结果
在这里插入图片描述

5. 使用标量值创建Series

# 使用单个标量值创建Series,会生成一个所有元素都等于该标量值的Series  
scalar_value = 10  
s5 = pd.Series(scalar_value, index=['a', 'b', 'c', 'd', 'e'])  
print(s5)

运行结果:
在这里插入图片描述

6. 使用已有的Series创建新的Series

# 使用已有的Series创建新的Series  
s6 = pd.Series(s3)  
print(s6)

运行结果:
在这里插入图片描述

7.使用range函数创建Series

# 使用range函数创建Series  
s7 = pd.Series(range(5))  
print(s7)

运行结果:
使用range函数创建Series

8. 从Dataframe里提取一行或一列生成Series

# 读取csv文件, 设置 id列为: 索引列
data = pd.read_csv('data/nobel_prizes.csv', index_col='id')
data.head() # 默认值只展示前5行数据

运行结果:
在这里插入图片描述

(1)用Dataframe的一行数据生成Series

first_row = data.loc[941]
print(first_row)        # 获取第一行数据, 但是是以列的方式展示的
print(type(first_row))  # <class 'pandas.core.series.Series'>

(2)用Dataframe的一列数据生成Series

year= data['year'] # 使用索引位置获取自己
print(year)        # 获取year列数据
print(type(year))  # <class 'pandas.core.series.Series'>

四. Serices的方法(函数)

1. append

连接两个或多个Series对象,返回一个新的Series。

s1 = pd.Series([1, 2, 3])  
s2 = pd.Series([4, 5, 6])  
  
result = s1.append(s2)  
print(result)

运行结果:
在这里插入图片描述

2. corr

计算与另一个Series的相关系数。

s1 = pd.Series([1, 2, 3, 4, 5])  
s2 = pd.Series([2, 3, 4, 5, 6])  
  
correlation = s1.corr(s2)  
print(correlation)

运行结果:
在这里插入图片描述

2. cov

计算与另一个Series的协方差。

s1 = pd.Series([1, 2, 3, 4, 5])  
s2 = pd.Series([2, 3, 4, 5, 6])  
  
covariance = s1.cov(s2)  
print(covariance)

在这里插入图片描述

4. describe

计算常见统计量,如计数、均值、标准差、最小值、四分位数和最大值。

s = pd.Series([1, 2, 3, 4, 5])  
stats = s.describe()  
print(stats)

运行结果:
在这里插入图片描述

5.drop_duplicates

返回去重之后的Series。

s = pd.Series([1, 2, 2, 3, 4, 4, 4])  
unique_s = s.drop_duplicates()  
print(unique_s)

运行结果:
在这里插入图片描述

6. equals

判断两个Series是否完全相同(元素和索引都相同)。

s1 = pd.Series([1, 2, 3])  
s2 = pd.Series([1, 2, 3])  
  
are_equal = s1.equals(s2)  
print(are_equal)

运行结果
在这里插入图片描述

7. hist

绘制直方图,显示Series值的分布。

s = pd.Series(np.random.randn(1000))  
s.hist()

运行结果:
在这里插入图片描述

8. isin

判断Series中是否包含某些值。

s = pd.Series(['a', 'b', 'c', 'd'])  
mask = s.isin(['a', 'c'])  
print(mask)

运行结果:
在这里插入图片描述

9. min, max, mean, median, mode, quantile

这些分别返回Series的最小值、最大值、平均值、中位数、众数和指定位置的分位数。

s = pd.Series([1, 2, 2, 3, 4, 4, 4, 5])  
min_val = s.min()  
max_val = s.max()  
mean_val = s.mean()  
median_val = s.median()  
mode_val = s.mode()  
quantile_val = s.quantile(0.75)  
print(min_val, max_val, mean_val, median_val, mode_val, quantile_val)

运行结果:
在这里插入图片描述

10. replace

用指定值代替Series中的值。

s = pd.Series([0, 1, 2, 3, 4])  
s_replaced = s.replace(2, -2)  # 2 为索引 -2为替换的值
print(s_replaced)

运行结果:
在这里插入图片描述

11. sample

从Series中返回随机采样的值。

s = pd.Series(np.random.randn(10))  
sample = s.sample(n=3)  
print(sample)

运行结果:
在这里插入图片描述

12.sort_values

对Series中的值进行排序。

s = pd.Series([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5])  
sorted_s = s.sort_values(ascending = True)  
print(sorted_s)

运行结果:
在这里插入图片描述

13. to_frame

将Series转换为DataFrame。

s = pd.Series(['a', 'b', 'c', 'd'])  
df = s.to_frame()  
print(df)

在这里插入图片描述

14.unique

去重后返回Series中的唯一值数组。

s = pd.Series([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5])  
df = s.unique()

在这里插入图片描述

五、Series的运算

在pandas中,Series对象支持多种算术运算和逻辑运算。这些运算通常按照索引进行,使得数据对齐变得非常简单。以下是一些关于Series运算的基本示例。

1.算术运算

算术运算包括加法、减法、乘法和除法等基本操作。当对两个Series对象进行算术运算时,pandas会尝试按照索引对齐数据,并对相应的元素执行运算。如果两个Series的索引不完全匹配,结果中缺失的索引位置将填充为NaN(表示“不是一个数字”)。

python
import pandas as pd  
  
# 创建两个Series对象  
s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])  
s2 = pd.Series([4, 5, 6], index=['b', 'c', 'd'])  
  
# 加法运算  
result_add = s1 + s2  
print(result_add)  
  
# 减法运算  
result_sub = s1 - s2  
print(result_sub)  
  
# 乘法运算  
result_mul = s1 * s2  
print(result_mul)  
  
# 除法运算  
result_div = s1 / s2  
print(result_div)

运行结果如下:
在这里插入图片描述

在上面的例子中,s1和s2的索引不完全相同。因此,在运算结果中,对于没有对应元素的索引位置(如s1中的’a’和s2中的’d’),结果将是NaN。

2. 逻辑运算

逻辑运算通常用于条件筛选或创建布尔索引。在Series中,你可以使用比较运算符(如==、!=、<、<=、>、>=)来创建布尔序列,然后用这个布尔序列来索引Series。

# 创建一个简单的Series对象  
s = pd.Series([1, 2, 3, 4, 5])  
  
# 使用逻辑条件筛选元素  
condition = s > 2  
filtered_s = s[condition]  
print(filtered_s)

运行结果如下:
在这里插入图片描述

在这个例子中,condition是一个布尔序列,其中s中大于2的元素对应的位置为True,其余为False。然后,我们使用这个布尔序列来索引s,得到一个新的Series对象filtered_s,它只包含原始Series中大于2的元素。

除了直接使用比较运算符外,你还可以使用逻辑运算符(如&、|、~)来组合多个条件。例如:

# 使用逻辑运算符组合多个条件  
condition1 = s > 2  
condition2 = s < 5  
filtered_s = s[condition1 & condition2]  
print(filtered_s)

运行结果如下
在这里插入图片描述

在这个例子中,combined_condition是一个新的布尔序列,它同时满足s > 2和s < 5的条件。然后,我们使用这个组合条件来筛选s中的元素。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐