DataFrame adalah API yang digunakan untuk memproses data terstruktur. Anda dapat menggunakan API DataFrame dari PyODPS untuk pemrosesan data, meningkatkan efisiensi pengembangan. Topik ini menjelaskan cara membuat objek DataFrame dengan mereferensikan sumber data.
Prasyarat
Tabel contoh pyodps_iris harus tersedia. Untuk informasi lebih lanjut tentang cara membuat tabel contoh, lihat Gunakan DataFrame untuk memproses data.
Informasi latar belakang
Untuk menggunakan objek DataFrame, Anda perlu memahami operasi pada objek Collection (DataFrame), Sequence, dan Scalar. Collection mewakili struktur data tabular (dua dimensi). Sequence mewakili kolom (satu dimensi). Scalar mewakili objek skalar.
Jika Anda menggunakan Pandas untuk membuat objek DataFrame, objek tersebut berisi data aktual. Namun, jika Anda menggunakan tabel MaxCompute, objek tersebut hanya mencakup operasi data tanpa menyimpan data aktual. Setelah objek DataFrame dibuat, MaxCompute akan menyimpan dan menghitung data.
Prosedur
Objek DataFrame adalah satu-satunya objek Collection yang perlu dibuat. Objek ini dapat digunakan untuk mereferensikan tabel MaxCompute, partisi MaxCompute, objek DataFrame Pandas, atau tabel SQLAlchemy (tabel database). Operasi referensi untuk semua sumber data ini serupa, sehingga Anda dapat memproses data tanpa perlu memodifikasi kode. Cukup ubah pointer input dan output, memungkinkan migrasi sejumlah kecil kode uji lokal ke MaxCompute. Akurasi migrasi dijamin oleh PyODPS DataFrame.
Buat objek DataFrame dari tabel MaxCompute
Untuk membuat objek DataFrame dari tabel MaxCompute, tentukan objek tabel dalam metode DataFrame atau gunakan metode to_df dari tabel. Contoh kode:
from odps.df import DataFrame
# Tentukan objek tabel.
iris = DataFrame(o.get_table('pyodps_iris'))
# Gunakan metode to_df dari tabel MaxCompute.
iris2 = o.get_table('pyodps_iris').to_df() Buat objek DataFrame dengan menggunakan partisi dalam tabel MaxCompute
Untuk membuat objek DataFrame menggunakan partisi dalam tabel MaxCompute, tentukan partisi dalam metode DataFrame atau gunakan metode to_df dari partisi. Contoh kode:
from odps.df import DataFrame
# (Opsional) Buat tabel terpartisi bernama partitioned_table. Jika tabel terpartisi ada, Anda dapat mengganti tabel terpartisi yang ada dengan tabel terpartisi partitioned_table berdasarkan kebutuhan bisnis Anda.
o.create_table('partitioned_table', ('num bigint, num2 double', 'pt string'), if_not_exists=True)
# Tentukan objek tabel.
pt_df = DataFrame(o.get_table('partitioned_table').get_partition('pt=20171111'))
# Gunakan metode to_df dari partisi.
pt_df2 = o.get_table('partitioned_table').get_partition('pt=20171111').to_df();Buat objek DataFrame dengan menggunakan objek DataFrame Pandas
Untuk membuat objek DataFrame menggunakan objek DataFrame Pandas, tentukan objek DataFrame Pandas dalam metode DataFrame.
Contoh Kode
from odps.df import DataFrame # Buat objek DataFrame dengan menggunakan objek DataFrame Pandas. import pandas as pd import numpy as np df = DataFrame(pd.DataFrame(np.arange(9).reshape(3, 3), columns=list('abc')))Catatan Penggunaan
Saat membuat objek DataFrame menggunakan objek DataFrame Pandas, perhatikan hal-hal berikut selama inisialisasi:
PyODPS DataFrame mencoba menebak tipe data NUMPY OBJECT atau STRING. Jika kolom kosong, kesalahan akan dikembalikan. Untuk mencegahnya, atur
unknown_as_stringke True dan ubah tipe data kolom menjadi STRING.Anda dapat menggunakan parameter
as_typeuntuk memaksa konversi tipe data. Jika tipe dasar digunakan, tipe ini akan dipaksa dikonversi saat membuat objek PyODPS DataFrame. Jika objek DataFrame Pandas berisi kolom LIST atau DICT, sistem tidak akan menebak tipe data kolom tersebut. Anda harus secara manual mengonfigurasias_type. Parameteras_typeharus diatur ke DICT.
Contoh
Contoh 1: Atur tipe data kolom
null_col2kefloat.df2 = DataFrame(df, unknown_as_string=True, as_type={'null_col2': 'float'}) print(df2.dtypes)Hasil berikut dikembalikan:
odps.Schema { sepallength float64 sepalwidth float64 petallength float64 petalwidth float64 name string null_col1 string # Tipe data tidak dapat diidentifikasi. Anda dapat mengatur unknown_as_string ke True untuk mengonversi tipe data menjadi STRING. null_col2 float64 # Tipe data secara paksa dikonversi menjadi FLOAT. }Contoh 2: Atur tipe data kolom
list_colkelist<int64>.df4 = DataFrame(df3, as_type={'list_col': 'list<int64>'}) print(df4.dtypes)Hasil berikut dikembalikan:
odps.Schema { id int64 list_col list<int64> # Tipe data tidak dapat diidentifikasi atau dikonversi secara otomatis. Anda harus menentukan as_type. }
CatatanPyODPS tidak mendukung pengunggahan tabel eksternal Object Storage Service (OSS) atau Tablestore ke MaxCompute.
Buat objek DataFrame dengan menggunakan tabel SQLAlchemy
Untuk membuat objek DataFrame menggunakan tabel SQLAlchemy, tentukan objek tabel SQLAlchemy dalam metode DataFrame. Untuk informasi lebih lanjut tentang cara menghubungkan SQLAlchemy ke proyek MaxCompute dan parameternya, lihat Hubungkan SQLAlchemy ke Proyek MaxCompute. Berikut adalah contoh kode:
from odps.df import DataFrame
import sqlalchemy
# Buat objek DataFrame dengan menggunakan tabel SQLAlchemy.
# Atur variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID ke ID AccessKey akun Alibaba Cloud Anda.
# Atur variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET ke Rahasia AccessKey akun Alibaba Cloud Anda.
# Kami menyarankan agar Anda tidak langsung menggunakan ID AccessKey atau Rahasia AccessKey Anda.
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) # Ikat metadata ke mesin database.
table = sqlalchemy.Table('pyodps_iris', metadata, extend_existing=True, autoload=True)
iris = DataFrame(table)