Series adalah struktur data satu dimensi pandas yang menyimpan sekumpulan nilai beserta labelnya. Topik ini membahas pembuatan Series dari list, dictionary, dan array NumPy, peran index sebagai label eksplisit, atribut values, index, dtype, dan name, serta perbedaan Series dengan array NumPy. Setelah membacanya, Series dapat dibuat dari berbagai sumber data, atributnya dapat dibaca, dan perilaku labelnya pada operasi aritmetika dapat dijelaskan.
Membuat Series dari list, dictionary, dan array#
Konstruktor pd.Series() menerima list, dictionary, atau array NumPy sebagai sumber data, dan pilihan sumber menentukan index yang terbentuk. Kode berikut membangun Series yang menyimpan pengukuran suhu tiga ruangan dengan ketiga cara tersebut.
import pandas as pd
import numpy as np
s1 = pd.Series([24.1, 23.8, 25.0])
print(s1)
s2 = pd.Series({"Lab A": 24.1, "Lab B": 23.8, "Arsip": 21.5})
print(s2)
s3 = pd.Series(
np.array([24.1, 23.8, 25.0]),
index=["Lab A", "Lab B", "Arsip"],
name="suhu_c",
)
print(s3)0 24.1
1 23.8
2 25.0
dtype: float64
Lab A 24.1
Lab B 23.8
Arsip 21.5
dtype: float64
Lab A 24.1
Lab B 23.8
Arsip 25.0
Name: suhu_c, dtype: float64Series dari list memperoleh index default berupa bilangan berurutan 0, 1, dan 2, seperti terlihat pada kolom kiri keluaran s1. Index adalah label yang menempel pada setiap nilai, dan istilah ini dipertahankan dalam bahasa Inggris oleh dokumentasi pandas. Series dari dictionary menggunakan kunci dictionary sebagai labelnya, sehingga s2 berlabel Lab A, Lab B, dan Arsip tanpa argumen tambahan. Series dari array NumPy menerima argumen index eksplisit, sedangkan argumen name memberi nama Series yang dipakai sebagai nama kolom bila Series dijadikan kolom DataFrame.
Baris terakhir setiap keluaran menyatakan dtype, yaitu tipe data elemen yang disimpan. Ketiga Series di atas memuat bilangan pecahan sehingga dtypenya float64. Tipe data ini ditentukan otomatis dari isinya dan dapat dibaca kembali lewat atribut yang dibahas pada bagian berikutnya.
Index sebagai label yang menyertai operasi#
Index membuat akses nilai dapat dilakukan lewat label dengan properti loc maupun lewat posisi dengan properti iloc, dan label itu ikut menyertai hasil setiap operasi. Dua properti ini dipisahkan secara sengaja agar maksud setiap baris akses terbaca jelas. Potongan berikut menggunakan kembali data suhu tiga ruangan dengan label yang sama.
import pandas as pd
s = pd.Series([24.1, 23.8, 25.0], index=["Lab A", "Lab B", "Arsip"])
print(s.loc["Lab A"])
print(s.iloc[0])
print(s + 0.5)24.1
24.1
Lab A 24.6
Lab B 24.3
Arsip 25.5
dtype: float64s.loc["Lab A"] mengambil nilai berlabel Lab A, sedangkan s.iloc[0] mengambil nilai pada posisi pertama, dan keduanya menghasilkan 24.1 pada tabel di atas. Penjumlahan dengan 0.5 menghasilkan Series baru yang labelnya sama persis dengan Series asalnya, sehingga setiap nilai tetap tahu milik ruangan mana. Label pada hasil bukan kebetulan, melainkan konsekuensi bahwa label dibawa sepanjang operasi satu-ke-satu.
Perilaku label menjadi lebih terlihat ketika dua Series dijumlahkan. Pandas menjajarkan nilai berdasarkan labelnya, perilaku yang disebut alignment atau penjajaran label, dan label yang tidak bertemu pada kedua sisi menghasilkan NaN (Not a Number), penanda nilai data yang kosong.
import pandas as pd
a = pd.Series({"Lab A": 24.1, "Lab B": 23.8})
b = pd.Series({"Lab B": 58.7, "Lab A": 60.2, "Arsip": 62.0})
print(a + b)Arsip NaN
Lab A 84.3
Lab B 82.5
dtype: float64Label Arsip hanya ada pada b, sehingga hasil penjumlahannya NaN, sedangkan Lab A dan Lab B bertemu di kedua sisi dan menghasilkan 84.3 serta 82.5. Keluaran juga disusun menurut label yang terurut, bukan urutan penyisipan a. Penjajaran semacam ini menjaga penggabungan data dari dua sumber yang berlabel sama tetap tepat pasangannya.
Atribut values, index, dtype, dan name#
Atribut values, index, dtype, dan name membuka isi serta metadata Series tanpa perlu mencetak seluruhnya. Atribut diakses lewat tanda titik setelah nama Series dan sering dipakai dalam kode yang memeriksa struktur data secara programatik. Contoh berikut membaca keempat atribut pada Series yang sama.
import pandas as pd
import numpy as np
s = pd.Series(
np.array([24.1, 23.8, 25.0]),
index=["Lab A", "Lab B", "Arsip"],
name="suhu_c",
)
print(s.values)
print(type(s.values).__name__)
print(s.index)
print(s.dtype)
print(s.name)[24.1 23.8 25. ]
ndarray
Index(['Lab A', 'Lab B', 'Arsip'], dtype='str')
float64
suhu_cAtribut values mengembalikan isi Series sebagai array NumPy satu dimensi, dan fungsi type mengonfirmasi bahwa objeknya adalah ndarray. Atribut index mengembalikan objek Index yang memuat label, pada contoh ini teks Lab A, Lab B, dan Arsip. Atribut dtype menyatakan float64, sedangkan name mengembalikan suhu_c yang diberikan saat pembuatan. Kombinasi keempatnya memberi gambaran lengkap tentang apa yang disimpan dan bagaimana penyimpanannya.
Perbedaan dengan array NumPy#
Perbedaan utama Series dengan array NumPy terletak pada label yang menyertai operasi dan pada perhitungan statistik yang mengabaikan NaN. Array NumPy bekerja murni dengan posisi, sedangkan Series membawa label pada setiap nilai. Perbedaan kedua ini paling mudah diamati pada data pengukuran yang tidak lengkap.
import numpy as np
import pandas as pd
s = pd.Series([24.1, np.nan, 25.0])
print(np.mean(s.values))
print(s.mean())
print(s.count())nan
24.55
2Pemanggilan np.mean atas ndarray hasil s.values menghasilkan nan karena NaN ikut masuk ke perhitungan. Metode mean() pada Series mengabaikan NaN dan menghitung rata-rata dari dua nilai yang tersisa, yaitu 24.55, sedangkan count() menghitung jumlah nilai yang terisi, yaitu 2. Perilaku ini menjadikan Series pilihan yang tepat untuk data pengukuran yang tidak lengkap, karena statistik deskriptifnya tetap bermakna tanpa pembersihan manual. Di samping perbedaan perilaku tersebut, keduanya berbagi fondasi yang sama, karena values Series memang array NumPy dan operasi per elemennya mewarisi mesin perhitungan yang sama.
Ringkasan#
pd.Series()menerima list dengan index default berurutan, dictionary dengan kunci sebagai label, dan array NumPy dengan argumenindexeksplisit, sedangkannamememberi nama Series.locmengakses lewat label daniloclewat posisi, sedangkan operasi antar Series menjajarkan nilai berdasarkan label sehingga label yang tidak bertemu menghasilkan NaN.- Atribut
valuesmengembalikan ndarray tanpa label, sedangkanindex,dtype, dannamememaparkan label, tipe data, dan nama Series. - Metode statistik Series seperti
mean()dancount()mengabaikan NaN secara default, berbeda dari fungsi NumPy pada ndarray yang memuat NaN.
Referensi#
- pandas.Series — pandas documentation — Dokumentasi konstruktor dan atribut Series pada pandas 3.1.0.
- Intro to data structures — pandas documentation — Panduan resmi pembuatan Series dan DataFrame dari berbagai sumber data.