Perilaku iterasi dasar pada objek Panda tergantung pada jenisnya. Saat melakukan iterasi pada suatu Seri, ini dianggap seperti array, dan iterasi dasar menghasilkan nilai. Struktur data lainnya, seperti DataFrame dan Panel, mengikuti konvensi seperti dict untuk mengulangi kunci objek
Singkatnya, iterasi dasar (untuk i dalam objek) menghasilkan −
Seri − nilai
DataFrame − label kolom
Panel − label item
Iterasi DataFrame
Iterasi DataFrame memberikan nama kolom. Mari kita perhatikan contoh berikut untuk memahami hal yang sama
import pandas as pd import numpy as np N=20 df = pd.DataFrame({ 'A': pd.date_range(start='2016-01-01',periods=N,freq='D'), 'x': np.linspace(0,stop=N-1,num=N), 'y': np.random.rand(N), 'C': np.random.choice(['Low','Medium','High'],N).tolist(), 'D': np.random.normal(100, 10, size=(N)).tolist() }) for col in df: print colOutputnya adalah sebagai berikut −
A C D x y _Untuk mengulangi baris DataFrame, kita dapat menggunakan fungsi berikut −
iteritems() − untuk mengulangi pasangan (kunci,nilai).
iterrows() − mengulangi baris sebagai pasangan (indeks, seri).
itertuples() − mengulangi baris sebagai namedtuples
iteritems()
Ulangi setiap kolom sebagai kunci, pasangan nilai dengan label sebagai kunci dan nilai kolom sebagai objek Seri
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(4,3),columns=['col1','col2','col3']) for key,value in df.iteritems(): print key,valueOutputnya adalah sebagai berikut −
col1 0 0.802390 1 0.324060 2 0.256811 3 0.839186 Name: col1, dtype: float64 col2 0 1.624313 1 -1.033582 2 1.796663 3 1.856277 Name: col2, dtype: float64 col3 0 -0.022142 1 -0.230820 2 1.160691 3 -0.830279 Name: col3, dtype: float64Perhatikan, setiap kolom diulang secara terpisah sebagai pasangan nilai kunci dalam sebuah Seri
iterrows()
iterrows() mengembalikan iterator yang menghasilkan setiap nilai indeks bersama dengan rangkaian yang berisi data di setiap baris
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3']) for row_index,row in df.iterrows(): print row_index,row _Outputnya adalah sebagai berikut −
0 col1 1.529759 col2 0.762811 col3 -0.634691 Name: 0, dtype: float64 1 col1 -0.944087 col2 1.420919 col3 -0.507895 Name: 1, dtype: float64 2 col1 -0.077287 col2 -0.858556 col3 -0.663385 Name: 2, dtype: float64 3 col1 -1.638578 col2 0.059866 col3 0.493482 Name: 3, dtype: float64Catatan - Karena iterrows() mengulangi baris, itu tidak mempertahankan tipe data di seluruh baris. 0,1,2 adalah indeks baris dan col1,col2,col3 adalah indeks kolom
itertuples()
metode itertuples() akan mengembalikan iterator yang menghasilkan tuple bernama untuk setiap baris dalam DataFrame. Elemen pertama tuple akan menjadi nilai indeks baris yang sesuai, sedangkan nilai sisanya adalah nilai baris
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3']) for row in df.itertuples(): print row _Outputnya adalah sebagai berikut −
Pandas(Index=0, col1=1.5297586201375899, col2=0.76281127433814944, col3=- 0.6346908238310438) Pandas(Index=1, col1=-0.94408735763808649, col2=1.4209186418359423, col3=- 0.50789517967096232) Pandas(Index=2, col1=-0.07728664756791935, col2=-0.85855574139699076, col3=- 0.6633852507207626) Pandas(Index=3, col1=0.65734942534106289, col2=-0.95057710432604969, col3=0.80344487462316527)Catatan - Jangan mencoba memodifikasi objek apa pun saat melakukan iterasi. Iterasi dimaksudkan untuk membaca dan iterator mengembalikan salinan objek asli (tampilan), sehingga perubahan tidak akan tercermin pada objek asli
Catatan. Dokumen Pandas menyatakan bahwa “Anda tidak boleh memodifikasi sesuatu yang Anda ulangi. Ini tidak dijamin untuk bekerja dalam semua kasus. Bergantung pada tipe datanya, iterator mengembalikan salinan dan bukan tampilan, dan menulis ke sana tidak akan berpengaruh. ”
2. Menggunakan Data Frame. itertuples() untuk Iterate Over Rows
Pandas 0 20000 Spark 1 25000 PySpark 2 26000 Hadoop 3 22000 Python 4 24000 Pandas 5 21000 Oracle 6 22000 Java _3 adalah metode yang paling sering digunakan untuk mengulang baris karena mengembalikan semua elemen DataFrame sebagai iterator yang berisi tuple untuk setiap baris. # Iterate all rows using DataFrame.iterrows() for index, row in df.iterrows(): print (index,row["Fee"], row["Courses"]) _3 lebih cepat dibandingkan dengan # Iterate all rows using DataFrame.iterrows() for index, row in df.iterrows(): print (index,row["Fee"], row["Courses"]) 2 dan mempertahankan tipe data
Di bawah ini adalah sintaks dari # Iterate all rows using DataFrame.iterrows() for index, row in df.iterrows(): print (index,row["Fee"], row["Courses"]) _3
#Syntax DataFrame.itertuples() DataFrame.itertuples(index=True, name='Pandas')- 0 20000 Spark 1 25000 PySpark 2 26000 Hadoop 3 22000 Python 4 24000 Pandas 5 21000 Oracle 6 22000 Java 8 – Default ke 'Benar'. Mengembalikan DataFrame Index sebagai elemen pertama dalam sebuah tuple. Menyetelnya ke False, tidak mengembalikan Index
- 0 20000 Spark 1 25000 PySpark 2 26000 Hadoop 3 22000 Python 4 24000 Pandas 5 21000 Oracle 6 22000 Java _9 – Default ke 'Panda'. Anda dapat memberikan nama khusus untuk tuple yang dikembalikan
Contoh di bawah ini mengulang semua elemen dalam sebuah tuple dan mendapatkan nilai dari setiap kolom dengan menggunakan # Row contains the column name and data row = next(df.iterrows())[1] print("Data For First Row :") print(row) 0
# Iterate all rows using DataFrame.itertuples() for row in df.itertuples(index = True): print (getattr(row,'Index'),getattr(row, "Fee"), getattr(row, "Courses"))Hasil di bawah output
0 20000 Spark 1 25000 PySpark 2 26000 Hadoop 3 22000 Python 4 24000 Pandas 5 21000 Oracle 6 22000 Java _Mari berikan nama khusus ke tuple
# Display one row from iterator row = next(df.itertuples(index = True,name='Tution')) print(row)Hasil di bawah output
Courses Fee Duration 0 Spark 20000 30day 1 PySpark 25000 40days 2 Hadoop 26000 35days 3 Python 22000 40days` 4 pandas 24000 60days 5 Oracle 21000 50days 6 Java 22000 55days _0Jika Anda menyetel parameter indeks ke # Row contains the column name and data row = next(df.iterrows())[1] print("Data For First Row :") print(row) 1, ini akan menghapus indeks sebagai elemen pertama tuple
4. Bingkai Data. apply() ke Iterasi
Anda juga dapat menggunakan metode # Row contains the column name and data row = next(df.iterrows())[1] print("Data For First Row :") print(row) _2 dari DataFrame untuk mengulang baris dengan menggunakan fungsi lambda. Untuk detail lebih lanjut, lihat DataFrame. menerapkan()
Courses Fee Duration 0 Spark 20000 30day 1 PySpark 25000 40days 2 Hadoop 26000 35days 3 Python 22000 40days` 4 pandas 24000 60days 5 Oracle 21000 50days 6 Java 22000 55days _1Contoh
Hasil di bawah output
Courses Fee Duration 0 Spark 20000 30day 1 PySpark 25000 40days 2 Hadoop 26000 35days 3 Python 22000 40days` 4 pandas 24000 60days 5 Oracle 21000 50days 6 Java 22000 55days _35. Iterasi menggunakan for dan DataFrame. indeks
Anda juga dapat mengulang baris dengan menggunakan for loop. # Row contains the column name and data row = next(df.iterrows())[1] print("Data For First Row :") print(row) 3 mengembalikan nilai baris pertama dari kolom # Iterate all rows using DataFrame.iterrows() for index, row in df.iterrows(): print (index,row["Fee"], row["Courses"]) 7
Courses Fee Duration 0 Spark 20000 30day 1 PySpark 25000 40days 2 Hadoop 26000 35days 3 Python 22000 40days` 4 pandas 24000 60days 5 Oracle 21000 50days 6 Java 22000 55days _4Hasil di bawah output
Courses Fee Duration 0 Spark 20000 30day 1 PySpark 25000 40days 2 Hadoop 26000 35days 3 Python 22000 40days` 4 pandas 24000 60days 5 Oracle 21000 50days 6 Java 22000 55days _56. Menggunakan untuk dan DataFrame. lokasi
Courses Fee Duration 0 Spark 20000 30day 1 PySpark 25000 40days 2 Hadoop 26000 35days 3 Python 22000 40days` 4 pandas 24000 60days 5 Oracle 21000 50days 6 Java 22000 55days _6Menghasilkan output yang sama seperti di atas
7. Menggunakan For dan DataFrame. iloc
Courses Fee Duration 0 Spark 20000 30day 1 PySpark 25000 40days 2 Hadoop 26000 35days 3 Python 22000 40days` 4 pandas 24000 60days 5 Oracle 21000 50days 6 Java 22000 55days _7Hasil di bawah output
Courses Fee Duration 0 Spark 20000 30day 1 PySpark 25000 40days 2 Hadoop 26000 35days 3 Python 22000 40days` 4 pandas 24000 60days 5 Oracle 21000 50days 6 Java 22000 55days _88. Menggunakan Data Frame. items() untuk Iterate Over Columns
Bingkai Data. items() digunakan untuk mengulang kolom (kolom demi kolom) panda DataFrame. Ini mengembalikan tuple (nama kolom, Seri) dengan nama dan konten sebagai Seri
Nilai pertama dalam tupel yang dikembalikan berisi nama label kolom dan yang kedua berisi konten/data DataFrame sebagai rangkaian
Courses Fee Duration 0 Spark 20000 30day 1 PySpark 25000 40days 2 Hadoop 26000 35days 3 Python 22000 40days` 4 pandas 24000 60days 5 Oracle 21000 50days 6 Java 22000 55days _9Hasil di bawah output
# Iterate all rows using DataFrame.iterrows() for index, row in df.iterrows(): print (index,row["Fee"], row["Courses"]) _09. Performa Pengulangan DataFrame
Iterasi DataFrame tidak disarankan atau disarankan untuk digunakan karena kinerjanya akan sangat buruk saat melakukan iterasi pada kumpulan data besar. Pastikan Anda menggunakan ini hanya ketika Anda kehabisan semua opsi lainnya. Sebelum menggunakan contoh yang disebutkan dalam artikel ini, periksa apakah Anda dapat menggunakan salah satu dari 1) Vektorisasi, 2) Rutinitas Cython, 3) Daftar Pemahaman (vanilla # Row contains the column name and data row = next(df.iterrows())[1] print("Data For First Row :") print(row) 5 loop)
10. Contoh Lengkap panda Iterate over Rows
# Iterate all rows using DataFrame.iterrows() for index, row in df.iterrows(): print (index,row["Fee"], row["Courses"]) _1Kesimpulan
DataFrame menyediakan beberapa metode untuk mengulangi baris (loop demi baris) dan mengakses kolom/sel. Tetapi tidak disarankan untuk mengulang baris secara manual karena menurunkan kinerja aplikasi saat digunakan pada kumpulan data besar. Setiap contoh yang dijelaskan dalam artikel ini berperilaku berbeda, jadi bergantung pada kasus penggunaan Anda, gunakan yang sesuai dengan kebutuhan Anda