首页 > 其他分享 >Polars简明基础教程七:Series 和 DataFrame 以及它们之间的转换_A

Polars简明基础教程七:Series 和 DataFrame 以及它们之间的转换_A

时间:2024-08-15 10:27:56浏览次数:9  
标签:elements Series 元素 DataFrame 索引 基础教程 print Polars

在听完这次讲座之后,您将能够:

  • 初步认识 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 个元素选择一个元素。如果省略 startstop,则默认值分别是 0Series 的长度。如果省略 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简明基础教程一:Polars快速入门

Polars简明基础教程二:懒惰模式 1:引入懒惰模式

Polars简明基础教程三:懒惰模式 1:引入懒惰模式(续)

Polars简明基础教程四:懒惰模式 2:评估查询

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

相关文章