全部產品
Search
文件中心

:Sequence

更新時間:Jun 19, 2024

SequenceExpr代表二維資料集中的一列。SequenceExpr只可以從一個Collection中擷取,不支援手動建立SequenceExpr。

前提條件

您需要提前完成以下步驟,用於操作本文中的樣本:

擷取列

  • 您可以使用collection.column_name取出一列, 程式碼範例如下。

    print(iris.sepallength.head(5))

    返回結果:

       sepallength
    0          4.9
    1          4.7
    2          4.6
    3          5.0
    4          5.4
  • 當列名儲存在一個字串變數中,可以使用df[column_name]實現取出一列, 程式碼範例如下。

    print(iris['sepallength'].head(5))

    返回結果

       sepallength
    0          4.9
    1          4.7
    2          4.6
    3          5.0
    4          5.4

列類型

DataFrame擁有自己的類型系統,進行表初始化時,MaxCompute的類型會被轉換成對應的DataFrame類型,以便支援更多類型的計算後端。目前,DataFrame的執行後端支援MaxCompute SQL、Pandas和資料庫(MySQL和Postgres)。

DataFrame支援的資料類型與MaxCompute類型的映射關係如下。

MaxCompute類型

DataFrame類型

BIGINT

INT64

DOUBLE

FLOAT64

STRING

STRING

DATETIME

DATETIME

BOOLEAN

BOOLEAN

DECIMAL

DECIMAL

ARRAY<VALUE_TYPE>

LIST<VALUE_TYPE>

MAP<KEY_TYPE, VALUE_TYPE>

DICT<KEY_TYPE, VALUE_TYPE>

options.sql.use_odps2_extension=True時,還支援以下資料類型。

TINYINT

INT8

SMALLINT

INT16

INT

INT32

FLOAT

FLOAT32

資料類型說明如下:

  • LIST和DICT必須填寫其包含值的類型,否則會報錯。

  • 目前DataFrame暫不支援MaxCompute 2.0中新增的TIMESTAMP及STRUCT類型。

  • 在Sequence中可以通過sequence.dtype擷取資料類型,程式碼範例如下。

    print(iris.sepallength.dtype)

    返回結果:

    FLOAT64

  • 如果要修改一列的類型,可以使用astype方法。該方法輸入一個類型,並傳回型別轉換後的Sequence,程式碼範例如下。

    print(iris.sepallength.astype('int').head(5))

    返回結果:

       sepallength
    0            4
    1            4
    2            4
    3            5
    4            5

列名

  • 在DataFrame的計算過程中,每個Sequence必須要有列名。通常,DataFrame會為每個Sequence起一個名字,程式碼範例如下。

    print(iris.groupby('name').sepalwidth.max().head(5))

    返回結果:

       sepalwidth_max
    0             4.4
    1             3.4
    2             3.8
    說明

    上述樣本中,sepalwidth取最大值後被命名為sepalwidth_max。除部分操作外(例如,給指定Sequence加上一個Scalar時,結果會自動被命名為這個Sequence的名字),為Sequence命名的操作需要您自己手動完成。

  • Sequence提供rename方法對一列進行重新命名,程式碼範例如下。

    print(iris.sepalwidth.rename('sepal_width').head(5))

    返回結果:

       sepal_width
    0          3.0
    1          3.2
    2          3.1
    3          3.6
    4          3.9

簡單的列變換

  • 您可以對一個Sequence進行運算,返回一個新的Sequence,這種操作類似於對簡單的Python變數進行運算。Sequence支援對數值列進行四則運算,而對字串則僅支援字串的相加操作。 程式碼範例如下:

    print((iris.sepallength + 5).head(5))

    返回結果:

       sepallength
    0          9.9
    1          9.7
    2          9.6
    3         10.0
    4         10.4
  • 兩列共同參與運算時,PyODPS無法確定最終顯示的列名,需要您手動指定,程式碼範例如下。

       sum_sepal
    0        7.9
    1        7.9
    2        7.7
    3        8.6
    4        9.3
    說明

    更多列變換說明,請參見列運算