全部产品
Search
文档中心

MaxCompute:Koleksi

更新时间:Jun 19, 2025

CollectionExpr mendukung semua operasi pada dataset dua dimensi DataFrame. Dapat dianggap sebagai tabel MaxCompute atau spreadsheet. Objek DataFrame juga merupakan objek CollectionExpr. CollectionExpr mendukung berbagai operasi seperti operasi kolom, penyaringan data, dan transformasi data.

Prasyarat

Pastikan persyaratan berikut terpenuhi:

  • Tabel bernama pyodps_iris telah disiapkan. Untuk informasi lebih lanjut, lihat bagian "Pemrosesan data DataFrame" di Memulai.

  • Objek DataFrame telah dibuat. Untuk informasi lebih lanjut, lihat bagian "Buat objek DataFrame dari tabel MaxCompute" di Buat objek DataFrame.

Ambil tipe

Anda dapat menggunakan metode dtypes untuk mengambil tipe semua kolom dalam objek CollectionExpr. Pada contoh ini, metode dtypes mengembalikan Tipe Skema. Berikut adalah contoh kodenya:

print(iris.dtypes)

Hasil yang dikembalikan:

odps.Schema {
  sepallength           float64
  sepalwidth            float64
  petallength           float64
  petalwidth            float64
  name                  string
}

Pilih, tambah, dan hapus kolom

Pilih kolom

Gunakan sintaks expr[columns] untuk memilih kolom tertentu dari objek CollectionExpr. Contoh berikut menunjukkan implementasinya:

print(iris['name', 'sepallength'].head(5))

Hasil yang dikembalikan:

          name  sepallength
0  Iris-setosa          4.9
1  Iris-setosa          4.7
2  Iris-setosa          4.6
3  Iris-setosa          5.0
4  Iris-setosa          5.4
null

Jika hanya satu kolom diperlukan, tambahkan koma (,) setelah nama kolom atau tandai kolom sebagai daftar, misalnya iris[iris.sepallength,] atau iris[[iris.sepallength]]. Jika tidak, objek Sequence akan dikembalikan alih-alih objek Collection.

Hapus kolom

  • Gunakan metode exclude untuk mengecualikan kolom tertentu dari dataset baru. Contoh berikut menunjukkan implementasinya:

    print(iris.exclude('sepallength', 'petallength')[:5].head(5))

    Hasil yang dikembalikan:

       sepalwidth  petalwidth         name
    0         3.0         0.2  Iris-setosa
    1         3.2         0.2  Iris-setosa
    2         3.1         0.2  Iris-setosa
    3         3.6         0.2  Iris-setosa
    4         3.9         0.4  Iris-setosa
  • Dalam PyODPS versi 0.7.2 atau lebih baru, Anda dapat menggunakan sintaks baru untuk langsung mengecualikan kolom tertentu. Contoh berikut menunjukkan implementasinya:

    del iris['sepallength']
    del iris['petallength']
    print(iris[:5].head(5))

    Hasil yang dikembalikan:

       sepalwidth  petalwidth         name
    0         3.0         0.2  Iris-setosa
    1         3.2         0.2  Iris-setosa
    2         3.1         0.2  Iris-setosa
    3         3.6         0.2  Iris-setosa
    4         3.9         0.4  Iris-setosa

Tambah kolom

  • Gunakan sintaks expr[expr, new_sequence] untuk menambahkan kolom yang ditransformasi ke objek Collection yang ada. Kolom baru menjadi bagian dari objek Collection baru.

    Contoh berikut menambahkan kolom baru dengan menambahkan satu ke setiap nilai di kolom sepalwidth dari tabel iris. Kolom baru diberi nama sepalwidthplus1 dan ditambahkan ke dataset yang ada. Contoh berikut menunjukkan implementasinya:

    print(iris[iris, (iris.sepalwidth + 1).rename('sepalwidthplus1')].head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name  \
    0          4.9         3.0          1.4         0.2  Iris-setosa   
    1          4.7         3.2          1.3         0.2  Iris-setosa   
    2          4.6         3.1          1.5         0.2  Iris-setosa   
    3          5.0         3.6          1.4         0.2  Iris-setosa   
    4          5.4         3.9          1.7         0.4  Iris-setosa   
    
       sepalwidthplus1  
    0              4.0  
    1              4.2  
    2              4.1  
    3              4.6  
    4              4.9  
  • Jika menggunakan sintaks expr[expr, new_sequence], kolom yang ditransformasi mungkin memiliki nama yang sama dengan kolom asli. Ubah nama kolom baru jika ingin menggabungkannya dengan objek Collection asli. Dalam PyODPS versi 0.7.2 atau lebih baru, Anda dapat langsung menambahkan kolom ke dataset saat ini. Contoh berikut menunjukkan implementasinya:

    iris['sepalwidthplus1'] = iris.sepalwidth + 1
    print(iris.head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name  \
    0          4.9         3.0          1.4         0.2  Iris-setosa   
    1          4.7         3.2          1.3         0.2  Iris-setosa   
    2          4.6         3.1          1.5         0.2  Iris-setosa   
    3          5.0         3.6          1.4         0.2  Iris-setosa   
    4          5.4         3.9          1.7         0.4  Iris-setosa  
    
       sepalwidthplus1  
    0              4.0  
    1              4.2  
    2              4.1  
    3              4.6  
    4              4.9 

Tambah dan hapus kolom secara bersamaan

  • Gunakan metode exclude untuk mengecualikan kolom asli dan menambahkan kolom baru ke dataset tanpa perlu mengubah nama kolom baru. Contoh berikut menunjukkan implementasinya:

    print(iris[iris.exclude('sepalwidth'), iris.sepalwidth * 2].head(5))

    Hasil yang dikembalikan:

       sepallength  petallength  petalwidth         name  sepalwidth
    0          4.9          1.4         0.2  Iris-setosa         6.0
    1          4.7          1.3         0.2  Iris-setosa         6.4
    2          4.6          1.5         0.2  Iris-setosa         6.2
    3          5.0          1.4         0.2  Iris-setosa         7.2
    4          5.4          1.7         0.4  Iris-setosa         7.8
  • Dalam PyODPS versi 0.7.2 atau lebih baru, Anda dapat langsung menggunakan kolom baru untuk menimpa kolom asli pada dataset saat ini. Contoh berikut menunjukkan implementasinya:

    iris['sepalwidth'] = iris.sepalwidth * 2
    print(iris.head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name
    0          4.9         6.0          1.4         0.2  Iris-setosa
    1          4.7         6.4          1.3         0.2  Iris-setosa
    2          4.6         6.2          1.5         0.2  Iris-setosa
    3          5.0         7.2          1.4         0.2  Iris-setosa
    4          5.4         7.8          1.7         0.4  Iris-setosa
  • Untuk menambah dan menghapus kolom secara bersamaan, gunakan metode select untuk membuat objek Collection baru. Gunakan kolom yang dipilih sebagai parameter input dan ubah nama kolom menggunakan parameter keyword. Contoh berikut menunjukkan implementasinya:

    print(iris.select('name', sepalwidthminus1=iris.sepalwidth - 1).head(5))

    Hasil yang dikembalikan:

              name  sepalwidthminus1
    0  Iris-setosa               2.0
    1  Iris-setosa               2.2
    2  Iris-setosa               2.1
    3  Iris-setosa               2.6
    4  Iris-setosa               2.9
  • Anda juga dapat melewati ekspresi lambda, yang mengambil hasil dari operasi sebelumnya sebagai parameter. Selama eksekusi, PyODPS memeriksa ekspresi lambda dan memasukkan objek Collection yang dihasilkan dari operasi sebelumnya dan menggantinya dengan kolom yang valid. Contoh berikut menunjukkan implementasinya:

    print(iris['name', 'petallength'][[lambda x: x.name]].head(5))

    Hasil yang dikembalikan:

              name
    0  Iris-setosa
    1  Iris-setosa
    2  Iris-setosa
    3  Iris-setosa
    4  Iris-setosa
  • Dalam PyODPS versi 0.7.2 atau lebih baru, penugasan bersyarat didukung. Contoh berikut menunjukkan implementasinya:

    iris[iris.sepallength > 5.0, 'sepalwidth'] = iris.sepalwidth * 2
    print(iris.head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name
    0          4.9         3.0          1.4         0.2  Iris-setosa
    1          4.7         3.2          1.3         0.2  Iris-setosa
    2          4.6         3.1          1.5         0.2  Iris-setosa
    3          5.0         3.6          1.4         0.2  Iris-setosa
    4          5.4         7.8          1.7         0.4  Iris-setosa

Perkenalkan konstanta dan angka acak

Perkenalkan konstanta

  • DataFrame memungkinkan Anda menambahkan kolom konstanta ke objek Collection. Scalar diperlukan untuk memperkenalkan konstanta. Tentukan nama kolom secara manual. Contoh berikut menunjukkan implementasinya:

    from odps.df import Scalar
    print(iris[iris, Scalar(1).rename('id')][:5].head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name  id
    0          4.9         3.0          1.4         0.2  Iris-setosa   1
    1          4.7         3.2          1.3         0.2  Iris-setosa   1
    2          4.6         3.1          1.5         0.2  Iris-setosa   1
    3          5.0         3.6          1.4         0.2  Iris-setosa   1
    4          5.4         3.9          1.7         0.4  Iris-setosa   1
  • Gunakan NullScalar untuk menentukan kolom null. Tentukan tipe bidang secara manual. Contoh berikut menunjukkan implementasinya:

    from odps.df import NullScalar
    print(iris[iris, NullScalar('float').rename('fid')][:5].head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name   fid
    0          4.9         3.0          1.4         0.2  Iris-setosa  None
    1          4.7         3.2          1.3         0.2  Iris-setosa  None
    2          4.6         3.1          1.5         0.2  Iris-setosa  None
    3          5.0         3.6          1.4         0.2  Iris-setosa  None
    4          5.4         3.9          1.7         0.4  Iris-setosa  None
  • Dalam PyODPS versi 0.7.12 atau lebih baru, sintaks yang lebih sederhana tersedia. Contoh berikut menunjukkan implementasinya:

    iris['id'] = 1
    print(iris.head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name  id
    0          4.9         3.0          1.4         0.2  Iris-setosa   1
    1          4.7         3.2          1.3         0.2  Iris-setosa   1
    2          4.6         3.1          1.5         0.2  Iris-setosa   1
    3          5.0         3.6          1.4         0.2  Iris-setosa   1
    4          5.4         3.9          1.7         0.4  Iris-setosa   1

    Jika menggunakan sintaks ini, tipe nilai null tidak dapat diidentifikasi secara otomatis. Oleh karena itu, gunakan kode berikut untuk menambahkan kolom null.

    iris['null_col'] = NullScalar('float')
    print(iris.head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name null_col
    0          4.9         3.0          1.4         0.2  Iris-setosa     None
    1          4.7         3.2          1.3         0.2  Iris-setosa     None
    2          4.6         3.1          1.5         0.2  Iris-setosa     None
    3          5.0         3.6          1.4         0.2  Iris-setosa     None
    4          5.4         3.9          1.7         0.4  Iris-setosa     None

Perkenalkan angka acak

DataFrame memungkinkan Anda menambahkan kolom angka acak ke objek Collection. Tipe kolom adalah FLOAT dengan rentang nilai 0-1. Setiap baris memiliki nilai yang berbeda. RandomScalar diperlukan untuk operasi ini, dengan seed acak opsional sebagai parameternya. Contoh berikut menunjukkan implementasinya:

from odps.df import RandomScalar
iris[iris, RandomScalar().rename('rand_val')][:5]

Hasil yang dikembalikan:

   sepallength  sepalwidth  petallength  petalwidth         name  rand_val
0          4.9         3.0          1.4         0.2  Iris-setosa  0.000471
1          4.7         3.2          1.3         0.2  Iris-setosa  0.799520
2          4.6         3.1          1.5         0.2  Iris-setosa  0.834609
3          5.0         3.6          1.4         0.2  Iris-setosa  0.106921
4          5.4         3.9          1.7         0.4  Iris-setosa  0.763442

Filter data

Objek Collection memungkinkan Anda menyaring data menggunakan operator AND (&), OR (|), NOT (~), filter, ekspresi lambda, dan beberapa metode query.

  • Contoh 1: Query data dengan nilai sepallength lebih besar dari 5.

    print(iris[iris.sepallength > 5].head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name
    0          5.4         3.9          1.7         0.4  Iris-setosa
    1          5.4         3.7          1.5         0.2  Iris-setosa
    2          5.8         4.0          1.2         0.2  Iris-setosa
    3          5.7         4.4          1.5         0.4  Iris-setosa
    4          5.4         3.9          1.3         0.4  Iris-setosa
  • Contoh 2: Gunakan kondisi AND (&).

    print(iris[(iris.sepallength < 5) & (iris['petallength'] > 1.5)].head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth             name
    0          4.8         3.4          1.6         0.2      Iris-setosa
    1          4.8         3.4          1.9         0.2      Iris-setosa
    2          4.7         3.2          1.6         0.2      Iris-setosa
    3          4.8         3.1          1.6         0.2      Iris-setosa
    4          4.9         2.4          3.3         1.0  Iris-versicolor
  • Contoh 3: Gunakan kondisi OR (|).

    print(iris[(iris.sepalwidth < 2.5) | (iris.sepalwidth > 4)].head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth             name
    0          5.7         4.4          1.5         0.4      Iris-setosa
    1          5.2         4.1          1.5         0.1      Iris-setosa
    2          5.5         4.2          1.4         0.2      Iris-setosa
    3          4.5         2.3          1.3         0.3      Iris-setosa
    4          5.5         2.3          4.0         1.3  Iris-versicolor
    null

    Gunakan ampersand (&) untuk merepresentasikan operator AND dan garis vertikal (|) untuk merepresentasikan operator OR. and dan or tidak dapat digunakan.

  • Contoh 4: Gunakan kondisi NOT (~).

    print(iris[~(iris.sepalwidth > 3)].head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name
    0          4.9         3.0          1.4         0.2  Iris-setosa
    1          4.4         2.9          1.4         0.2  Iris-setosa
    2          4.8         3.0          1.4         0.1  Iris-setosa
    3          4.3         3.0          1.1         0.1  Iris-setosa
    4          5.0         3.0          1.6         0.2  Iris-setosa
  • Contoh 5: Secara eksplisit panggil metode filter dan tentukan beberapa kondisi AND.

    print(iris.filter(iris.sepalwidth > 3.5, iris.sepalwidth < 4).head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name
    0          5.0         3.6          1.4         0.2  Iris-setosa
    1          5.4         3.9          1.7         0.4  Iris-setosa
    2          5.4         3.7          1.5         0.2  Iris-setosa
    3          5.4         3.9          1.3         0.4  Iris-setosa
    4          5.7         3.8          1.7         0.3  Iris-setosa
  • Contoh 6: Gunakan ekspresi lambda untuk operasi berkelanjutan.

    print(iris[iris.sepalwidth > 3.8]['name', lambda x: x.sepallength + 1].head(5))

    Hasil yang dikembalikan:

              name  sepallength
    0  Iris-setosa          6.4
    1  Iris-setosa          6.8
    2  Iris-setosa          6.7
    3  Iris-setosa          6.4
    4  Iris-setosa          6.2
  • Contoh 7: Untuk objek Collection yang berisi kolom tipe BOOLEAN, gunakan kolom tersebut sebagai kondisi filter.

    # Query the schema.
    print(df.dtypes)
    # Hasil yang diperoleh.
    odps.Schema {
      a boolean
      b int64
    }
    
    # Gunakan Kolom a dengan tipe BOOLEAN untuk menyaring data.
    print(df[df.a])
    # Hasil yang diperoleh.
          a  b
    0  True  1
    1  True  3

    Saat mengambil Sequence tunggal dari objek Collection, hanya kolom tipe BOOLEAN yang dapat digunakan sebagai kondisi filter yang valid.

    df[df.a, ]       # Ambil koleksi satu kolom. 
    df[[df.a]]       # Ambil koleksi satu kolom. 
    df.select(df.a)  # Secara eksplisit ambil koleksi satu kolom. 
    df[df.a]         # Gunakan Kolom a dari tipe BOOLEAN untuk menyaring data. 
    df.a             # Ambil kolom dari koleksi. 
    df['a']          # Ambil kolom dari koleksi.
  • Contoh 8: Gunakan metode query di Pandas untuk menyaring data menggunakan pernyataan query dan langsung gunakan nama kolom seperti sepallength dalam ekspresi untuk melakukan operasi. Dalam pernyataan query, baik & maupun and menunjukkan operator AND, dan baik | maupun or menunjukkan operator OR.

    print(iris.query("(sepallength < 5) and (petallength > 1.5)").head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth             name
    0          4.8         3.4          1.6         0.2      Iris-setosa
    1          4.8         3.4          1.9         0.2      Iris-setosa
    2          4.7         3.2          1.6         0.2      Iris-setosa
    3          4.8         3.1          1.6         0.2      Iris-setosa
    4          4.9         2.4          3.3         1.0  Iris-versicolor

    Jika variabel lokal diperlukan dalam sebuah ekspresi, tambahkan tanda at (@) sebelum nama variabel.

    var = 4
    print(iris.query("(sepalwidth < 2.5) | (sepalwidth > @var)").head(5))

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth             name
    0          5.7         4.4          1.5         0.4      Iris-setosa
    1          5.2         4.1          1.5         0.1      Iris-setosa
    2          5.5         4.2          1.4         0.2      Iris-setosa
    3          4.5         2.3          1.3         0.3      Iris-setosa
    4          5.5         2.3          4.0         1.3  Iris-versicolor

    Tabel berikut menjelaskan sintaks metode query.

    Sintaks

    Deskripsi

    name

    Semua kolom yang tidak memiliki awalan tanda at (@) dianggap sebagai nama kolom. Jika kolom memiliki awalan tersebut, variabel lokal akan diambil.

    operator

    Operator berikut didukung: +, -, *, /, //, %, **, ==, !=, <, <=, >, >=, in, dan not in.

    bool

    Operasi AND atau OR. & dan and mewakili operator AND. | dan or mewakili operator OR.

    attribute

    Atribut objek.

    index, slice, subscript

    Operasi slice.

Konversi kolom menjadi baris

  • Gunakan metode explode untuk mengubah kolom tipe LIST atau MAP menjadi beberapa baris. Anda juga dapat menggunakan metode apply untuk operasi keluaran multi-baris. Untuk operasi seperti agregasi, gabungkan baris keluaran dengan kolom di tabel asli menggunakan fitur keluaran multi-baris DataFrame. Fitur ini memetakan sekumpulan data yang dihasilkan oleh fungsi keluaran multi-baris ke nama kolom di set asli. Contoh berikut menunjukkan cara menggunakan fitur ini.

    • Query data sampel.

      print(df)

      Hasil yang dikembalikan:

         id         a             b
      0   1  [a1, b1]  [a2, b2, c2]
      1   2      [c1]      [d2, e2]
    • Contoh 1:

      print(df[df.id, df.a.explode(), df.b])

      Hasil yang dikembalikan:

         id   a             b
      0   1  a1  [a2, b2, c2]
      1   1  b1  [a2, b2, c2]
      2   2  c1      [d2, e2]
    • Contoh 2:

      print(df[df.id, df.a.explode(), df.b.explode()])

      Hasil yang dikembalikan:

         id   a   b
      0   1  a1  a2
      1   1  a1  b2
      2   1  a1  c2
      3   1  b1  a2
      4   1  b1  b2
      5   1  b1  c2
      6   2  c1  d2
      7   2  c1  e2
  • Jika metode explode tidak menghasilkan keluaran untuk baris input, baris input tidak akan muncul di keluaran secara default. Untuk mempertahankan baris di keluaran, tambahkan konfigurasi keep_nulls=True. Dalam hal ini, nilai null terdaftar di baris. Contoh berikut menunjukkan implementasinya:

    • Query data sampel.

      print(df)

      Hasil yang dikembalikan:

         id         a
      0   1  [a1, b1]
      1   2        []
    • Contoh 1:

      print(df[df.id, df.a.explode()])

      Hasil yang dikembalikan:

         id   a
      0   1  a1
      1   1  b1
    • Contoh 2:

      print(df[df.id, df.a.explode(keep_nulls=True)])

      Hasil yang dikembalikan:

         id     a
      0   1    a1
      1   1    b1
      2   2  None
  • Untuk informasi lebih lanjut tentang cara menggunakan metode explode untuk mengimplementasikan keluaran multi-baris, lihat bagian "Operasi terkait koleksi" di Operasi Kolom.

Batasan keluaran

  • Kembalikan tiga baris pertama data.

    print(iris[:3].execute())

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name
    0          4.9         3.0          1.4         0.2  Iris-setosa
    1          4.7         3.2          1.3         0.2  Iris-setosa
    2          4.6         3.1          1.5         0.2  Iris-setosa
  • Dalam SQL MaxCompute, operasi slice backend tidak mendukung metode start dan step, tetapi mendukung metode limit.

    print(iris.limit(3).execute())

    Hasil yang dikembalikan:

       sepallength  sepalwidth  petallength  petalwidth         name
    0          4.9         3.0          1.4         0.2  Iris-setosa
    1          4.7         3.2          1.3         0.2  Iris-setosa
    2          4.6         3.1          1.5         0.2  Iris-setosa
    null

    Anda dapat melakukan operasi slice pada objek Collection, bukan objek Sequence.