文档

Sequence

更新时间:

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
    说明

    更多列变换说明,请参见列运算