Lembar contekan saya dengan panda

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 pandasdan 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 diunduh

Ada 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 data

3. 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, nmari 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 data


Data 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)
#=> 3

▍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 data

Ada 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 ratingmemberi 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 kolom

5. 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 xdan yuntuk melatih model. Perintah berikut ini berlaku di sini:

anime['genre'].tolist()
anime['genre']


Hasil dari anime ['genre']. Tolist () command


Anime ['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 Tim

6. 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 perintah

Perintah 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 df1


Datframe df2


Dataframe menggabungkan df1 dan df2

▍ Gabungkan frame data


Fungsi df.mergeyang 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 Tim

8. Penyaringan


▍Mendapatkan baris dengan nilai indeks yang diinginkan


Nilai indeks dari frame data anime_modifiedadalah 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.ilocbaris 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 perintah

Jika 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 Tim

9. Sortir


Untuk mengurutkan frame data berdasarkan nilai kolom, Anda dapat menggunakan fungsi df.sort_values:

anime.sort_values('rating', ascending=False)


Hasil Tim

10. 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 typemenjadi 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 Tim

11. Pembersihan data


▍ Menulis ke sel yang berisi nilai NaN dari beberapa nilai lainnya


Di sini kita berbicara tentang menulis nilai 0ke 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 NaNdengan 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 NaN


Hasil penggantian nilai NaN dengan 0

12. Fitur berguna lainnya


▍ Pengambilan sampel acak dari suatu dataset


Saya menggunakan fungsi ini df.samplesetiap 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 pandastrik berguna untuk menggunakan lingkungan Notebook Jupyter. Saya harap lembar cheat saya berguna.

Pembaca yang budiman! Apakah ada peluang pandastanpanya Anda tidak dapat membayangkan pekerjaan sehari-hari Anda?


All Articles