SequenceExpr代表二維資料集中的一列。SequenceExpr只可以從一個Collection中擷取,不支援手動建立SequenceExpr。
前提條件
您需要提前完成以下步驟,用於操作本文中的樣本:
準備樣本表pyodps_iris,詳情請參見Dataframe資料處理。
建立DataFrame,詳情請參見從MaxCompute表建立DataFrame。
擷取列
您可以使用
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> |
當 | |
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
說明更多列變換說明,請參見列運算。