Seorang guru pernah mengatakan kepada saya bahwa jika Anda mencari analog dari seorang programmer di dunia buku, ternyata programmer tidak seperti buku teks, melainkan daftar isi: mereka tidak mengingat semuanya, tetapi mereka tahu cara cepat menemukan apa yang mereka butuhkan.Kemampuan untuk menemukan deskripsi fungsi dengan cepat memungkinkan pemrogram untuk bekerja secara produktif tanpa kehilangan status arus. Itu sebabnya saya membuat lembar contekan yang disajikan di sini pandas
dan memasukkan di dalamnya apa yang saya gunakan setiap hari, membuat aplikasi web dan model pembelajaran mesin. Ini bukan daftar fitur yang lengkap , tetapi mencakup fungsi yang paling sering saya gunakan, contoh dan penjelasan saya tentang situasi di mana fungsi ini sangat berguna.
pandas
1. Persiapan untuk bekerja
Jika Anda ingin menguji secara independen apa yang akan dibahas di sini, unduh dataset Database Rekomendasi Anime dari Kaggle. Buka zip dan letakkan di folder yang sama di mana Notebook Jupyter Anda berada (selanjutnya - notepad).Sekarang jalankan perintah berikut.import pandas as pd
import numpy as np
anime = pd.read_csv('anime-recommendations-database/anime.csv')
rating = pd.read_csv('anime-recommendations-database/rating.csv')
anime_modified = anime.set_index('name')
Setelah itu, Anda harus dapat mereproduksi apa yang akan saya tunjukkan di bagian berikut dari materi ini.2. Impor data
▍ Unduh data CSV
Di sini saya ingin berbicara tentang mengubah data CSV langsung ke dalam bingkai data (ke dalam Dataframe). Terkadang saat mengunduh data dalam format CSV, Anda perlu menentukan penyandiannya (misalnya, mungkin terlihat seperti encoding='ISO-8859–1'
). Ini adalah hal pertama yang harus Anda coba lakukan jika ternyata setelah memuat data, frame data berisi karakter yang tidak dapat dibaca.anime = pd.read_csv('anime-recommendations-database/anime.csv')
Data CSV yang diunduhAda fungsi serupa untuk memuat data dari file Excelpd.read_excel
.▍Membuat bingkai data dari data yang dimasukkan secara manual
Ini bisa bermanfaat ketika Anda perlu memasukkan data sederhana secara manual ke dalam program. Misalnya, jika Anda perlu mengevaluasi perubahan yang mengalami data yang melewati pipa pemrosesan data.df = pd.DataFrame([[1,'Bob', 'Builder'],
[2,'Sally', 'Baker'],
[3,'Scott', 'Candle Stick Maker']],
columns=['id','name', 'occupation'])
Entri Manual▍ Menyalin bingkai data
Menyalin bingkai data dapat berguna dalam situasi di mana Anda perlu membuat perubahan pada data ini, tetapi Anda juga harus menyimpan yang asli. Jika frame data perlu disalin, disarankan untuk segera melakukannya setelah mengunduhnya.anime_copy = anime.copy(deep=True)
Salinan bingkai data3. Ekspor data
▍ Ekspor ke format CSV
Saat mengekspor data, mereka disimpan dalam folder yang sama dengan notepad. Di bawah ini adalah contoh menyimpan 10 baris pertama dari suatu bingkai data, tetapi apa sebenarnya yang harus disimpan tergantung pada tugas tertentu.rating[:10].to_csv('saved_ratings.csv', index=False)
Anda dapat mengekspor data sebagai file Excel menggunakan fungsi ini df.to_excel
.4. Melihat dan meneliti data
▍Mendapat n catatan dari awal atau akhir frame data
Pertama, n
mari kita bicara tentang output elemen pertama dari frame data. Saya sering menyimpulkan sejumlah elemen dari awal bingkai data di suatu tempat di notebook. Ini memungkinkan saya untuk dengan mudah mengakses data ini jika saya lupa tentang apa sebenarnya yang ada dalam bingkai data. Kesimpulan dari beberapa elemen terakhir memainkan peran yang sama.anime.head(3)
rating.tail(1)
Data dari awal bingkai dataData dari ujung bingkai data▍ Menghitung jumlah baris dalam bingkai data
Fungsi len(),
yang akan saya tunjukkan di sini tidak termasuk pandas
. Tetapi sangat cocok untuk menghitung jumlah baris frame data. Hasil kerjanya dapat disimpan dalam variabel dan digunakan di mana mereka dibutuhkan.len(df)
▍Menghitung jumlah nilai unik dalam kolom
Untuk menghitung jumlah nilai unik dalam kolom, Anda dapat menggunakan konstruksi ini:len(ratings['user_id'].unique())
▍ Mendapatkan informasi bingkai data
Informasi tentang kerangka data mencakup informasi umum tentangnya, seperti header, jumlah nilai, tipe data kolom.anime.info()
Informasi bingkai dataAda fungsi lain yang mirip dengandf.info
-df.dtypes
. Ini hanya menampilkan informasi tentang tipe data kolom.▍Menampilkan statistik tentang kerangka data
Mengetahui informasi statistik tentang kerangka data sangat berguna dalam situasi di mana ia mengandung banyak nilai numerik. Misalnya, mengetahui nilai rata-rata, minimum, dan maksimum kolom rating
memberi kita beberapa wawasan tentang bagaimana kerangka data secara keseluruhan terlihat. Ini perintah yang sesuai:anime.describe()
Statistik bingkai data▍ Perhitungan jumlah
Untuk menghitung jumlah nilai dalam kolom tertentu, Anda dapat menggunakan konstruksi berikut:anime.type.value_counts()
Hitung jumlah item dalam kolom5. Mengekstrak informasi dari bingkai data
▍Membuat daftar atau objek Seri berdasarkan nilai kolom
Ini bisa berguna dalam kasus di mana Anda ingin mengekstraksi nilai kolom ke dalam variabel x
dan y
untuk melatih model. Perintah berikut ini berlaku di sini:anime['genre'].tolist()
anime['genre']
Hasil dari anime ['genre']. Tolist () commandAnime ['genre'] Hasil Tim▍Mendapatkan daftar nilai dari indeks
Mari kita bicara tentang mendapatkan daftar nilai dari indeks. Harap dicatat bahwa saya menggunakan bingkai data di sini anime_modified
, karena nilai indeksnya terlihat lebih menarik.anime_modified.index.tolist()
Hasil Tim▍Mendapatkan daftar nilai kolom
Berikut adalah perintah yang memungkinkan Anda untuk mendapatkan daftar nilai kolom:anime.columns.tolist()
Hasil Tim6. Menambahkan data ke bingkai data dan menghapusnya dari itu
▍Menghubungkan kolom baru dengan nilai yang ditentukan ke bingkai data
Terkadang saya harus menambahkan kolom baru ke bingkai data. Misalnya - dalam kasus di mana saya memiliki set tes dan pelatihan dalam dua kerangka data yang berbeda, dan sebelum menggabungkannya, saya perlu menandainya sehingga mereka dapat dibedakan nanti. Untuk ini, konstruksi berikut digunakan:anime['train set'] = True
▍Membuat bingkai data baru dari subset kolom
Ini bisa berguna jika Anda ingin menyimpan beberapa kolom dari frame data besar di frame data baru, tetapi Anda tidak ingin menuliskan nama-nama kolom yang ingin Anda hapus.anime[['name','episodes']]
Hasil perintah▍ Hapus kolom yang ditentukan
Teknik ini mungkin berguna jika Anda hanya perlu menghapus beberapa kolom dari bingkai data. Jika Anda perlu menghapus banyak kolom, maka tugas ini bisa sangat membosankan, jadi di sini saya lebih suka menggunakan peluang yang dijelaskan di bagian sebelumnya.anime.drop(['anime_id', 'genre', 'members'], axis=1).head()
Hasil Tim▍Menambahkan baris dengan jumlah nilai dari baris lain ke bingkai data
Untuk mendemonstrasikan contoh ini, kami akan secara independen membuat kerangka data kecil yang nyaman untuk digunakan. Hal yang paling menarik di sini adalah desainnya df.sum(axis=0)
, yang memungkinkan Anda mendapatkan jumlah nilai dari baris yang berbeda. df = pd.DataFrame([[1,'Bob', 8000],
[2,'Sally', 9000],
[3,'Scott', 20]], columns=['id','name', 'power level'])
df.append(df.sum(axis=0), ignore_index=True)
Hasil perintahPerintah tampilandf.sum(axis=1)
memungkinkan Anda untuk menjumlahkan nilai dalam kolom.Mekanisme serupa juga berlaku untuk menghitung nilai rata-rata. Misalnya -df.mean(axis=0)
.7. Menggabungkan frame data
▍ Rangkaian dua frame data
Teknik ini berlaku dalam situasi di mana ada dua bingkai data dengan kolom yang sama yang perlu digabungkan.Dalam contoh ini, pertama-tama kita membagi bingkai data menjadi dua bagian, dan kemudian menggabungkan bagian-bagian ini lagi:df1 = anime[0:2]
df2 = anime[2:4]
pd.concat([df1, df2], ignore_index=True)
Dataframe df1Datframe df2Dataframe menggabungkan df1 dan df2▍ Gabungkan frame data
Fungsi df.merge
yang akan kita lihat di sini mirip dengan gabungan SQL kiri. Ini digunakan ketika dua frame data perlu digabungkan dalam kolom tertentu.rating.merge(anime, left_on=’anime_id’, right_on=’anime_id’, suffixes=(‘_left’, ‘_right’))
Hasil Tim8. Penyaringan
▍Mendapatkan baris dengan nilai indeks yang diinginkan
Nilai indeks dari frame data anime_modified
adalah nama-nama anime. Perhatikan bagaimana kami menggunakan nama-nama ini untuk memilih kolom tertentu.anime_modified.loc[['Haikyuu!! Second Season','Gintama']]
Hasil Tim▍Mendapatkan string dengan indeks numerik
Teknik ini berbeda dari yang dijelaskan pada bagian sebelumnya. Saat menggunakan fungsi, df.iloc
baris pertama diberi indeks 0
, yang kedua adalah indeks 1
, dan seterusnya. Indeks tersebut ditetapkan ke baris bahkan jika bingkai data telah dimodifikasi dan nilai string digunakan dalam kolom indeksnya.Konstruksi berikut memungkinkan Anda untuk memilih tiga baris pertama dari frame data:anime_modified.iloc[0:3]
Hasil Tim▍Menerima baris dengan nilai kolom yang diberikan
Untuk mendapatkan baris bingkai data dalam situasi di mana ada daftar nilai kolom, Anda bisa menggunakan perintah berikut:anime[anime['type'].isin(['TV', 'Movie'])]
Hasil perintahJika kami tertarik pada satu makna - Anda dapat menggunakan desain ini:anime[anime[‘type’] == 'TV']
▍Mendapatkan irisan bingkai data
Teknik ini mirip dengan mendapatkan sepotong daftar. Yaitu, kita berbicara tentang mendapatkan fragmen bingkai data yang berisi baris yang sesuai dengan konfigurasi indeks yang diberikan.anime[1:3]
Hasil Tim▍ Penyaringan berdasarkan nilai
Dari bingkai data, Anda dapat memilih baris yang cocok dengan kondisi yang ditentukan. Harap dicatat bahwa menggunakan metode ini mempertahankan nilai indeks yang ada.anime[anime['rating'] > 8]
Hasil Tim9. Sortir
Untuk mengurutkan frame data berdasarkan nilai kolom, Anda dapat menggunakan fungsi df.sort_values
:anime.sort_values('rating', ascending=False)
Hasil Tim10. Agregasi
▍Df. Grup berfungsi dan menghitung jumlah catatan
Berikut cara menghitung jumlah rekaman dengan nilai yang berbeda di kolom:anime.groupby('type').count()
Hasil Tim▍ fungsi grup dan agregasi kolom dengan berbagai cara
Perhatikan apa yang digunakan di sini reset_index()
. Kalau tidak, kolom type
menjadi kolom indeks. Dalam kebanyakan kasus, saya sarankan melakukan hal yang sama.anime.groupby(["type"]).agg({
"rating": "sum",
"episodes": "count",
"name": "last"
}).reset_index()
▍Buat tabel pivot
Untuk mengekstraksi beberapa data dari frame data, tidak ada yang lebih baik dari tabel pivot. Harap perhatikan bahwa di sini saya serius memfilter bingkai data, yang mempercepat pembuatan tabel pivot.tmp_df = rating.copy()
tmp_df.sort_values('user_id', ascending=True, inplace=True)
tmp_df = tmp_df[tmp_df.user_id < 10]
tmp_df = tmp_df[tmp_df.anime_id < 30]
tmp_df = tmp_df[tmp_df.rating != -1]
pd.pivot_table(tmp_df, values='rating', index=['user_id'], columns=['anime_id'], aggfunc=np.sum, fill_value=0)
Hasil Tim11. Pembersihan data
▍ Menulis ke sel yang berisi nilai NaN dari beberapa nilai lainnya
Di sini kita berbicara tentang menulis nilai 0
ke sel yang berisi nilai NaN
. Dalam contoh ini, kami membuat tabel pivot yang sama seperti sebelumnya, tetapi tanpa digunakan fill_value=0
. Dan kemudian gunakan fungsi fillna(0)
untuk mengganti nilai-nilai NaN
dengan 0
.pivot = pd.pivot_table(tmp_df, values='rating', index=['user_id'], columns=['anime_id'], aggfunc=np.sum)
pivot.fillna(0)
Tabel yang berisi nilai NaNHasil penggantian nilai NaN dengan 012. Fitur berguna lainnya
▍ Pengambilan sampel acak dari suatu dataset
Saya menggunakan fungsi ini df.sample
setiap kali saya perlu mendapatkan satu set baris acak kecil dari bingkai data yang besar. Jika parameter digunakan frac=1
, maka fungsi tersebut memungkinkan Anda untuk mendapatkan analog dari frame data asli, baris yang akan dicampur.anime.sample(frac=0.25)
Hasil Tim▍Pilih baris bingkai data
Konstruksi berikut memungkinkan Anda untuk beralih di baris baris data:for idx,row in anime[:2].iterrows():
print(idx, row)
Hasil Tim▍ Melawan laju data IOPub melebihi kesalahan
Jika Anda menemukan kesalahan IOPub data rate exceeded
, coba gunakan perintah berikut saat memulai Jupyter Notebook:jupyter notebook — NotebookApp.iopub_data_rate_limit=1.0e10
Ringkasan
Di sini saya berbicara tentang beberapa pandas
trik berguna untuk menggunakan lingkungan Notebook Jupyter. Saya harap lembar cheat saya berguna.Pembaca yang budiman! Apakah ada peluang pandas
tanpanya Anda tidak dapat membayangkan pekerjaan sehari-hari Anda?