Todos os produtos
Search
Central de documentação

MaxCompute:Crie um objeto DataFrame

Última atualização: Jun 26, 2026

O PyODPS oferece uma API de DataFrame para processar dados estruturados no MaxCompute. Um objeto DataFrame pode referenciar quatro tipos de fontes de dados — tabelas do MaxCompute, partições do MaxCompute, DataFrames do Pandas e tabelas do SQLAlchemy — usando a mesma interface. Alterne entre as fontes de dados modificando a entrada, sem reescrever a lógica de processamento. Isso facilita o desenvolvimento e os testes locais com Pandas e a posterior execução da mesma lógica em escala no MaxCompute.

Pré-requisitos

Antes de começar, verifique se você tem:

Conceitos principais

O objeto DataFrame do PyODPS é o único objeto Collection que exige criação manual. Os três tipos principais de objetos são:

Objeto

Estrutura

Descrição

Collection (DataFrame)

Bidimensional

Representa uma tabela completa

Sequence

Unidimensional

Representa uma única coluna

Scalar

Valor único

Representa um objeto escalar

Avaliação preguiçosa: Um DataFrame criado a partir de uma tabela do MaxCompute não carrega os dados reais; ele mantém apenas uma representação das operações a executar. O MaxCompute executa essas operações e armazena os resultados somente quando você aciona a computação. Por outro lado, um DataFrame criado a partir de um DataFrame do Pandas mantém os dados reais na memória.

Referência rápida de fontes de dados

Todos os quatro métodos de criação usam o mesmo construtor DataFrame(source). A única diferença está no parâmetro passado como source.

Fonte de dados

Método

Uso típico

Tabela do MaxCompute

DataFrame(o.get_table(...)) ou .to_df()

Processamento de dados em produção

Partição do MaxCompute

DataFrame(o.get_table(...).get_partition(...)) ou .to_df()

Processamento com escopo de partição

DataFrame do Pandas

DataFrame(pandas_df)

Testes e desenvolvimento local

Tabela do SQLAlchemy

DataFrame(sqlalchemy_table)

Acesso a tabelas de banco de dados

Crie um objeto DataFrame a partir de uma tabela do MaxCompute

Passe o objeto de tabela diretamente para DataFrame ou chame to_df() na tabela.

from odps.df import DataFrame

# Method 1: Pass the table object to DataFrame
iris = DataFrame(o.get_table('pyodps_iris'))

# Method 2: Use the to_df method on the table
iris2 = o.get_table('pyodps_iris').to_df()

Ambos os métodos produzem objetos DataFrame equivalentes, com o mesmo esquema.

Crie um objeto DataFrame a partir de uma partição do MaxCompute

Passe um objeto de partição para DataFrame ou chame to_df() na partição.

from odps.df import DataFrame

# Create a partitioned table if one does not already exist
o.create_table('partitioned_table', ('num bigint, num2 double', 'pt string'), if_not_exists=True)

# Method 1: Pass the partition object to DataFrame
pt_df = DataFrame(o.get_table('partitioned_table').get_partition('pt=20171111'))

# Method 2: Use the to_df method on the partition
pt_df2 = o.get_table('partitioned_table').get_partition('pt=20171111').to_df()

Crie um objeto DataFrame a partir de um DataFrame do Pandas

Passe o DataFrame do Pandas para o construtor DataFrame.

from odps.df import DataFrame
import pandas as pd
import numpy as np

df = DataFrame(pd.DataFrame(np.arange(9).reshape(3, 3), columns=list('abc')))

Inferência de tipos de dados

Ao converter um DataFrame do Pandas, o PyODPS infere os tipos de dados automaticamente. Use os parâmetros abaixo para controlar a resolução de tipos quando a inferência falhar ou gerar resultados incorretos:

Parâmetro

Tipo

Descrição

unknown_as_string

bool

Quando definido como True, converte colunas com tipos irreconhecíveis (incluindo colunas vazias) para string em vez de gerar um erro

as_type

dict

Defina explicitamente o tipo de dados de uma ou mais colunas; obrigatório para colunas do tipo list e dict, pois o PyODPS não consegue inferi-las automaticamente

Exemplo 1: Resolver uma coluna vazia e substituir um tipo de dados

df2 = DataFrame(df, unknown_as_string=True, as_type={'null_col2': 'float'})
print(df2.dtypes)

Saída:

odps.Schema {
  sepallength           float64
  sepalwidth            float64
  petallength           float64
  petalwidth            float64
  name                  string
  null_col1             string   # unknown_as_string=True converted this to string
  null_col2             float64  # as_type forced this to float
}

Exemplo 2: Definir o tipo para uma coluna de lista

O PyODPS não infere tipos para colunas list ou dict. Defina as_type como um dicionário que mapeia os nomes das colunas aos respectivos tipos.

df4 = DataFrame(df3, as_type={'list_col': 'list<int64>'})
print(df4.dtypes)

Saída:

odps.Schema {
  id        int64
  list_col  list<int64>  # as_type is required for list and dict columns
}
O PyODPS não oferece suporte ao upload de tabelas externas do Object Storage Service (OSS) ou do Tablestore para o MaxCompute.

Crie um objeto DataFrame a partir de uma tabela do SQLAlchemy

Conecte o SQLAlchemy ao seu projeto do MaxCompute e passe o objeto de tabela para DataFrame. Para obter os parâmetros de conexão, consulte Conectar o SQLAlchemy a um projeto do MaxCompute.

import os
from odps.df import DataFrame
import sqlalchemy

# Build the connection string using environment variables for your AccessKey credentials.
# Set ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET before running this code.
conn_string = 'odps://%s:%s@<project>/?endpoint=<endpoint>' % (
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
)

engine = sqlalchemy.create_engine(conn_string)
metadata = sqlalchemy.MetaData(bind=engine)  # Bind metadata to the engine
table = sqlalchemy.Table('pyodps_iris', metadata, extend_existing=True, autoload=True)

iris = DataFrame(table)

Próximos passos

Após criar um objeto DataFrame, execute operações de dados usando a API de DataFrame do PyODPS. Para ver as operações disponíveis, consulte Usar DataFrame para processar dados.