Pandas入门篇(一)-------Series篇(巨详细易懂!适合新手!!机器学习前置技术栈)
本入门文档旨在向初学者介绍Series的基本概念、创建方法以及常用操作。通过本文档的学习,你将能够掌握Series的基本用法,包括如何创建Series对象、如何访问和修改Series中的数据、如何进行算术和逻辑运算、如何应用统计方法以及如何进行数据转换等
在数据科学的世界中,数据处理和分析是不可或缺的一环。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)
运行结果
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)
运行结果:
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中的元素。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)