Polars简明基础教程五:什么是Polars的“DataFrame(数据框)_上”

学习目的

在本次讲座中,我们将从高层次的角度了解Polars的DataFrame,并学习:

  • 如何访问重要的元数据
  • Polars如何使用Apache Arrow存储数据
  • 当我们修改DataFrame时会发生什么 

在这里,我们有一个dataframe的示例(示例中用到的csv数据文件可在这里免费下载:“泰坦尼克号生还者数据集”):

import polars as pl
import numpy as np

csv_file = "../data/titanic.csv"
df = pl.read_csv(csv_file)
df.head(3)

shape: (3, 15)
┌──────────┬────────┬────────┬──────┬───┬──────┬─────────────┬───────┬───────┐
│ survived ┆ pclass ┆ sex    ┆ age  ┆ … ┆ deck ┆ embark_town ┆ alive ┆ alone │
│ ---      ┆ ---    ┆ ---    ┆ ---  ┆   ┆ ---  ┆ ---         ┆ ---   ┆ ---   │
│ i64      ┆ i64    ┆ str    ┆ f64  ┆   ┆ str  ┆ str         ┆ str   ┆ bool  │
╞══════════╪════════╪════════╪══════╪═══╪══════╪═════════════╪═══════╪═══════╡
│ 0        ┆ 3      ┆ male   ┆ 22.0 ┆ … ┆ null ┆ Southampton ┆ no    ┆ false │
│ 1        ┆ 1      ┆ female ┆ 38.0 ┆ … ┆ C    ┆ Cherbourg   ┆ yes   ┆ false │
│ 1        ┆ 3      ┆ female ┆ 26.0 ┆ … ┆ null ┆ Southampton ┆ yes   ┆ true  │
└──────────┴────────┴────────┴──────┴───┴──────┴─────────────┴───────┴───────┘

Polars的DataFrame

Polars的DataFrame:

  •  是一个存储在Arrow表中的表格数据集
  • 有高度和宽度(二维表格数据结构)
  • 有唯一的字符串列名
  • 每列都有数据类型(dtype)
  • 有用于转换存储在Arrow表中的数据的方法 

我们可以获取DataFrame的高度(行数)和宽度(列数)两个属性:

df.width
15

df.height
891

数据类型模式

DataFrame中的每一列都有一个称为dtype的数据类型。

我们可以使用.schema属性获取一个OrderedDict,它将列名映射到dtypes。

df.schema

Schema({'survived': Int64, 'pclass': Int64, 'sex': String, 'age': Float64, 'sibsp': Int64, 'parch': Int64, 'fare': Float64, 'embarked': String, 'class': String, 'who': String, 'adult_male': Boolean, 'deck': String, 'embark_town': String, 'alive': String, 'alone': Boolean})

还有一个dtypes属性(与Pandas中的类似)。但是,这会提供一个没有列名的dtypes的list。

df.dtypes

[Int64, Int64, String, Float64, Int64, Int64, Float64, String, String, String, Boolean, String, String, String, Boolean]

Series也有一个数据类型属性

df['age'].dtype

Float64

超类型

Polars 的 DataFrame 支持多种数据类型(dtypes),这些数据类型与 Pandas 类似但也有其独特之处。

我们可以将Polars  DataFrame 的 dtypes分组:

  •  integers:整型,如 pl.Int8,pl.Int16 等
  • floats: 浮点型,如 pl.Float32,pl.Float64
  • string: 字符型,如 pl.Utf8
  • boolean: 布尔型,如 pl.Boolean
  • datetime: 日期时间型,如 pl.Datetime,pl.Date 等 

Polars还有一个超类型(Supertypes)的概念。当我们尝试执行涉及具有不同类型的列的操作时,就会出现超类型。如果这些列的数据类型(dtypes)有一个超类型,那么所有列都将被转换为该类型以执行操作。

超类型是针对给定的一对数据类型定义的,而不是通用的。

超类型(Supertypes )的概念

  • Supertype 是 Polars 中的一种抽象类型,它能够表示一个 Series 中可能存在的多种具体类型。例如,一个 Series 可能同时包含整数和浮点数。

  • Subtypes 是具体的类型,它们可以组合在一起形成一个 supertype。例如,整数 (Int32, Int64) 和浮点数 (Float32, Float64) 可以被视为 Numeric supertype 的子类型。

超类型(Supertypes )的作用

  1. 类型转换:

    • 当需要将不同类型的 Series 转换为同一类型时,Polars 会根据 supertype 的规则来进行转换。
    • 例如,如果一个 Series 包含 Int64 和 Float64 类型的数据,则转换后的 Series 类型将会是 Float64,因为 Numeric supertype 会倾向于更宽泛的类型。
  2. 类型推断:

    • 在某些操作中,Polars 需要决定输出 Series 的类型。这时它会根据 supertype 的规则来推断结果类型。
  3. 灵活性:

    • Supertypes 提供了更高的灵活性,使得在不知道确切类型的情况下也能进行数据处理。

以下是一些简单的例子:

包含 Int8 和  Int16 类型的数据,则转换后的 Series 类型将会是  Int16:

 - pl.Int8 & pl.Int16 -> pl.Int16

包含  Float32 和 Float64 类型的数据,则转换后的 Series 类型将会是 Float64:

 - pl.Float32 & pl.Float64 -> pl.Float64

对于其他组合,也有相应的规则,例如:

- pl.Int64 与 pl.Boolean -> pl.Boolean(整数与布尔值的组合通常导致布尔值类型)

- pl.Int32 与 pl.Float32 -> pl.Float64(遵循Numpy的约定,整数和浮点数组合时,转换为浮点数类型,并尽量扩展至更大的位宽)

- 任何dtype 与 pl.Utf8 -> pl.Utf8(任何数据类型都可以转换为字符串类型,因此任何列都可以被转换为Utf8类型)

Polars简明基础教程系列

Polars简明基础教程一:Polars快速入门

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

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

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

Polars简明基础教程五:什么是Polars的“DataFrame(数据框)_上”

Polars简明基础教程六:什么是Polars的“DataFrame(数据框)_下”

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值