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
说明更多列变换说明,请参见列运算。