在听完这次讲座之后,您将能够:
- 初步认识 Series 和 DataFrame 的一些特性。
- 在 Series 和 DataFrame 列之间进行转换。
- 在 Python 的 lists(列表)、dicts(字典)与 Series 和 DataFrames 之间来回转换。
Series
在 Polars 中,Series
是一个非常重要的数据结构,它类似于 NumPy 的数组或 Pandas 的 Series。Series
代表一维的数据,可以包含各种数据类型,如整数、浮点数、字符串等。它在 Polars 中扮演着关键角色,因为 DataFrame 本质上是由多个 Series
组成的。
Series的创建
Series
可以通过多种方式创建,例如从列表、NumPy 数组、Pandas Series 或 Polars Dataframe 创建。以下是一些创建 Series
的示例:
从列表创建Series:
import polars as pl
# 从列表创建 Series
s1 = pl.Series([1, 2, 3, 4, 5])
print(s1)
从 Numpy 数组创建 Series:
# 从 NumPy 数组创建 Series
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
s2 = pl.Series(arr)
print(s2)
从 Pandas Series 创建 Series:
# 从 Pandas Series 创建 Series
import pandas as pd
pd_series = pd.Series([1, 2, 3, 4, 5])
s3 = pl.from_pandas(pd_series)
print(s3)
Series的数据类型:
Polars 的 Series
支持多种数据类型,这些数据类型可以大致分为基本类型和复合类型。
基本数据类型
基本数据类型通常包括数字类型(整数、浮点)、布尔类型和字符串类型。
-
整数类型:
Int8
: 8 位带符号整数。Int16
: 16 位带符号整数。Int32
: 32 位带符号整数。Int64
: 64 位带符号整数。UInt8
: 8 位无符号整数。UInt16
: 16 位无符号整数。UInt32
: 32 位无符号整数。UInt64
: 64 位无符号整数。
-
浮点类型:
Float32
: 32 位浮点数。Float64
: 64 位浮点数。
-
布尔类型:
Boolean
: 布尔值类型,只能取True
或False
。
-
字符串类型:
Utf8
: UTF-8 编码的字符串。
复合类型
-
列表类型:
List
: 列表类型可以包含任意类型的元素。例如,List[Int64]
表示一个列表,其中的元素都是Int64
类型。
-
结构体类型:
Struct
: 结构体类型可以包含多个字段,每个字段可以有不同的数据类型。例如,Struct[{"field1": Int64, "field2": Utf8}]
表示一个结构体,其中有两个字段:field1
为Int64
类型,field2
为Utf8
类型。
-
日期时间类型:
Datetime
: 日期时间类型,可以指定时间单位和时区。例如,Datetime("ns")
表示纳秒精度的日期时间类型,Datetime("ms", "UTC")
表示毫秒精度且时区为 UTC 的日期时间类型。
-
日期类型:
Date
: 日期类型,表示没有时间部分的日期。
-
时间类型:
Time
: 时间类型,表示没有日期部分的时间。
-
持续时间类型:
Duration
: 持续时间类型,可以指定时间单位。例如,Duration("ns")
表示纳秒精度的持续时间类型。
-
类别类型:
Categorical
: 类别类型,用于存储有限数量的类别。这在处理分类数据时非常有用。
-
对象类型:
Object
: 对象类型,用于存储任何 Python 对象。
Series索引:
Series
的索引指的是用于定位 Series
中元素的位置标识。Polars 的 Series
默认使用整数索引,这意味着索引是从 0 开始递增的。除了默认的整数索引外,Polars 还支持使用自定义索引,这在某些情况下非常有用。
默认整数索引
默认情况下,Polars 的 Series
使用整数索引。当你创建一个 Series
时,Polars 会自动为每个元素分配一个整数索引,索引从 0 开始递增。
import polars as pl
# 创建一个 Series
s = pl.Series([1, 2, 3, 4, 5])
# 显示 Series
print(s)
# 输出:
# shape: (5,)
# Series: '' [i64]
# [
# 1
# 2
# 3
# 4
# 5
# ]
使用索引访问元素
你可以使用索引来访问 Series
中的单个元素或一组元素。
使用索引来获取单个元素:
# 获取第一个元素
first_element = s[0]
print(first_element) # 输出: 1
# 获取最后一个元素
last_element = s[-1]
print(last_element) # 输出: 5
使用切片来获取一组元素:
# 获取第 2 到第 4 个元素
slice_elements = s[1:4]
print(slice_elements) # 输出: shape: (3,)
# Series: '' [i64]
# [
# 2
# 3
# 4
# ]
自定义索引
除了默认的整数索引外,Polars 还支持使用自定义索引。自定义索引可以是任何可以排序的类型,如字符串、日期等。当你使用自定义索引时,你可以通过这些索引来访问 Series
中的元素。这在某些场景下非常有用,例如当你的数据具有特定的标签或日期作为索引时。
另外,使用自定义索引时需要注意索引的唯一性和可排序性。
创建一个带有自定义索引的 Series
:
# 创建一个带有自定义索引的 Series
index_values = ["a", "b", "c", "d", "e"]
data = [1, 2, 3, 4, 5]
s_custom_index = pl.Series(index=index_values, values=data)
# 显示 Series
print(s_custom_index)
# 输出:
# shape: (5,)
# Series: '' [i64]
# [
# 1
# 2
# 3
# 4
# 5
# ]
使用自定义索引来访问元素:
# 使用自定义索引访问元素
element_b = s_custom_index["b"]
print(element_b) # 输出: 2
# 使用切片获取多个元素
elements_slice = s_custom_index["b":"d"]
print(elements_slice) # 输出: shape: (3,)
# Series: '' [i64]
# [
# 2
# 3
# 4
# ]
Series的长度:
Series
的长度是指 Series
中元素的数量。长度是一个重要的属性,可以帮助你了解 Series
的大小。
获取长度
你可以使用 len()
函数或 .len()
方法来获取 Series
的长度。
创建一个 Series
并获取其长度:
import polars as pl
# 创建一个 Series
s = pl.Series([1, 2, 3, 4, 5])
# 获取 Series 的长度
length = len(s)
print(length) # 输出: 5
# 或者使用 .len() 方法
length_method = s.len()
print(length_method) # 输出: 5
使用长度
Series
的长度在许多场景中都非常有用,例如:
-
循环遍历:
当你需要遍历Series
中的所有元素时,长度可以帮助你确定循环次数。 -
数据验证:
你可以使用长度来验证数据集的大小是否符合预期。 -
子集选择:
你可以基于长度来选择Series
的子集,例如选择前 N 个元素。 -
条件判断:
在处理数据时,长度可以用来决定是否继续处理数据或采取不同的处理路径。
选择元素:
在 Polars 中,Series
提供了多种方法来获取元素。这些方法可以帮助你访问 Series
中的单个元素或一系列元素。下面是几种常用的获取元素的方法。
1. 使用索引获取单个元素
你可以使用索引来获取 Series
中的单个元素。默认情况下,Series
使用整数索引,索引从 0 开始。
import polars as pl
# 创建一个 Series
s = pl.Series([1, 2, 3, 4, 5])
# 获取第一个元素
first_element = s[0]
print(first_element) # 输出: 1
# 获取最后一个元素
last_element = s[-1]
print(last_element) # 输出: 5
2. 使用切片获取多个元素
你可以使用切片来获取 Series
中的一系列元素。切片语法与 Python 的列表切片语法相似。
# 获取第 2 到第 4 个元素
slice_elements = s[1:4]
print(slice_elements) # 输出: shape: (3,)
# Series: '' [i64]
# [
# 2
# 3
# 4
# ]
3. 使用条件表达式获取元素
你可以使用条件表达式来选择满足条件的元素。这通常涉及到 Series
的方法和操作符。
# 获取大于 2 的元素
filtered_elements = s[s > 2]
print(filtered_elements) # 输出: shape: (3,)
# Series: '' [i64]
# [
# 3
# 4
# 5
# ]
4. 使用 .take
方法获取指定位置的元素
.take
方法允许你通过提供索引列表来获取 Series
中指定位置的元素。
# 获取索引为 0 和 2 的元素
selected_elements = s.take([0, 2])
print(selected_elements) # 输出: shape: (2,)
# Series: '' [i64]
# [
# 1
# 3
# ]
5. 使用 .first
和 .last
方法获取第一个和最后一个元素
.first
和 .last
方法可以用来快速获取 Series
的第一个和最后一个元素。
# 获取第一个元素
first_element = s.first()
print(first_element) # 输出: 1
# 获取最后一个元素
last_element = s.last()
print(last_element) # 输出: 5
切片:
在 Polars 中,Series
的切片语法与 Python 的列表切片语法相似。切片的基本语法如下:
s[start:stop:step]
: 从 start
索引开始,到 stop
索引结束(不包括 stop
索引),每隔 step
个元素选择一个元素。如果省略 start
或 stop
,则默认值分别是 0
和 Series
的长度。如果省略 step
,则默认值为 1
。
import polars as pl
# 创建一个 Series
s = pl.Series([1, 2, 3, 4, 5])
# 获取第 2 到第 4 个元素
slice_elements = s[1:4]
print(slice_elements) # 输出: shape: (3,)
# Series: '' [i64]
# [
# 2
# 3
# 4
# ]
# 获取前 3 个元素
first_three_elements = s[:3]
print(first_three_elements) # 输出: shape: (3,)
# Series: '' [i64]
# [
# 1
# 2
# 3
# ]
# 获取后 2 个元素
last_two_elements = s[-2:]
print(last_two_elements) # 输出: shape: (2,)
# Series: '' [i64]
# [
# 4
# 5
# ]
# 每隔一个元素选择
every_other_element = s[::2]
print(every_other_element) # 输出: shape: (3,)
# Series: '' [i64]
# [
# 1
# 3
# 5
# ]
# 逆序选择
reversed_elements = s[::-1]
print(reversed_elements) # 输出: shape: (5,)
# Series: '' [i64]
# [
# 5
# 4
# 3
# 2
# 1
# ]
注意事项
- 切片操作不会修改原始
Series
。 - 切片操作返回一个新的
Series
,包含选择的元素。 - 如果
step
为负数,则会从后向前选择元素。
使用条件表达式切片
除了基于索引位置进行切片外,你还可以使用条件表达式来选择满足特定条件的元素。
选择大于 2 的元素:
# 选择大于 2 的元素
filtered_elements = s[s > 2]
print(filtered_elements) # 输出: shape: (3,)
# Series: '' [i64]
# [
# 3
# 4
# 5
# ]
方法和操作:
Series
提供了许多内置的方法,如 sum()
, mean()
, max()
, min()
, sort()
, reverse()
, unique()
, cumsum()
, shift()
, fillna()
, drop_nulls()
, apply()
等
# 计算最大值
max_value = s.max()
print(max_value) # 输出: 5
# 计算平均值
mean_value = s.mean()
print(mean_value) # 输出: 3.0
# 累加和
cumulative_sum = s.cumsum()
print(cumulative_sum) # 输出: shape: (5,)
# Series: '' [i64]
# [
# 1
# 3
# 6
# 10
# 15
# ]
# 填充缺失值
s_with_null = pl.Series([1, None, 3, 4, 5])
filled_s = s_with_null.fill_null(0)
print(filled_s) # 输出: shape: (5,)
# Series: '' [i64]
# [
# 1
# 0
# 3
# 4
# 5
# ]
算术运算:
Series
支持算术运算,如加法 +
, 减法 -
, 乘法 *
, 除法 /
等
# 创建另一个 Series
s2 = pl.Series([10, 20, 30, 40, 50])
# 加法
s_sum = s + s2
print(s_sum) # 输出: shape: (5,)
# Series: '' [i64]
# [
# 11
# 22
# 33
# 44
# 55
# ]
# 乘法
s_multiply = s * 2
print(s_multiply) # 输出: shape: (5,)
# Series: '' [i64]
# [
# 2
# 4
# 6
# 8
# 10
# ]
Polars简明基础教程系列
Polars简明基础教程三:懒惰模式 1:引入懒惰模式(续)
Polars简明基础教程五:什么是Polars的“DataFrame(数据框)_上”
Polars简明基础教程六:什么是Polars的“DataFrame(数据框)_下”
Polars简明基础教程七:Series 和 DataFrame 以及它们之间的转换_A
Polars简明基础教程八:Series 和 DataFrame 以及它们之间的转换_B
标签:elements,Series,元素,DataFrame,索引,基础教程,print,Polars From: https://blog.csdn.net/sosogod/article/details/141127049