Python Pandas - Mengindeks ulang
Reindexingmengubah label baris dan label kolom dari DataFrame. Untuk mengindeks ulang berarti menyesuaikan data agar sesuai dengan sekumpulan label tertentu di sepanjang sumbu tertentu.
Beberapa operasi dapat diselesaikan melalui pengindeksan seperti -
Susun ulang data yang ada agar cocok dengan kumpulan label baru.
Sisipkan penanda nilai yang hilang (NA) di lokasi label yang tidak memiliki data untuk label tersebut.
Contoh
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()
})
#reindex the DataFrame
df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
print df_reindexed
Nya output adalah sebagai berikut -
A C B
0 2016-01-01 Low NaN
2 2016-01-03 High NaN
5 2016-01-06 Low NaN
Indeks Ulang untuk Menyelaraskan dengan Objek Lain
Anda mungkin ingin mengambil sebuah objek dan mengindeks kembali sumbunya agar diberi label yang sama dengan objek lainnya. Perhatikan contoh berikut untuk memahami hal yang sama.
Contoh
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3'])
df1 = df1.reindex_like(df2)
print df1
Nya output adalah sebagai berikut -
col1 col2 col3
0 -2.467652 -1.211687 -0.391761
1 -0.287396 0.522350 0.562512
2 -0.255409 -0.483250 1.866258
3 -1.150467 -0.646493 -0.222462
4 0.152768 -2.056643 1.877233
5 -1.155997 1.528719 -1.343719
6 -1.015606 -1.245936 -0.295275
Note - Di sini df1 DataFrame diubah dan diindeks ulang seperti df2. Nama kolom harus cocok atau NAN akan ditambahkan untuk seluruh label kolom.
Mengisi saat Mengindeks Ulang
reindex() mengambil metode parameter opsional yang merupakan metode pengisian dengan nilai sebagai berikut -
pad/ffill - Isi nilai ke depan
bfill/backfill - Isi nilai mundur
nearest - Isi dari nilai indeks terdekat
Contoh
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
# Padding NAN's
print df2.reindex_like(df1)
# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill:")
print df2.reindex_like(df1,method='ffill')
Nya output adalah sebagai berikut -
col1 col2 col3
0 1.311620 -0.707176 0.599863
1 -0.423455 -0.700265 1.133371
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
Data Frame with Forward Fill:
col1 col2 col3
0 1.311620 -0.707176 0.599863
1 -0.423455 -0.700265 1.133371
2 -0.423455 -0.700265 1.133371
3 -0.423455 -0.700265 1.133371
4 -0.423455 -0.700265 1.133371
5 -0.423455 -0.700265 1.133371
Note - Empat baris terakhir diberi bantalan.
Batasan Pengisian saat Mengindeks Ulang
Argumen batas memberikan kontrol tambahan atas pengisian saat pengindeksan ulang. Limit menentukan jumlah maksimum pertandingan yang berurutan. Mari kita pertimbangkan contoh berikut untuk memahami hal yang sama -
Contoh
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
# Padding NAN's
print df2.reindex_like(df1)
# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill limiting to 1:")
print df2.reindex_like(df1,method='ffill',limit=1)
Nya output adalah sebagai berikut -
col1 col2 col3
0 0.247784 2.128727 0.702576
1 -0.055713 -0.021732 -0.174577
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
Data Frame with Forward Fill limiting to 1:
col1 col2 col3
0 0.247784 2.128727 0.702576
1 -0.055713 -0.021732 -0.174577
2 -0.055713 -0.021732 -0.174577
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
Note- Amati, hanya baris ke-7 yang diisi oleh baris ke-6 sebelumnya. Kemudian, baris dibiarkan apa adanya.
Mengganti nama
Metode rename () memungkinkan Anda untuk memberi label kembali sumbu berdasarkan beberapa pemetaan (sebuah dict atau Series) atau fungsi arbitrer.
Mari kita perhatikan contoh berikut untuk memahami ini -
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
print df1
print ("After renaming the rows and columns:")
print df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},
index = {0 : 'apple', 1 : 'banana', 2 : 'durian'})
Nya output adalah sebagai berikut -
col1 col2 col3
0 0.486791 0.105759 1.540122
1 -0.990237 1.007885 -0.217896
2 -0.483855 -1.645027 -1.194113
3 -0.122316 0.566277 -0.366028
4 -0.231524 -0.721172 -0.112007
5 0.438810 0.000225 0.435479
After renaming the rows and columns:
c1 c2 col3
apple 0.486791 0.105759 1.540122
banana -0.990237 1.007885 -0.217896
durian -0.483855 -1.645027 -1.194113
3 -0.122316 0.566277 -0.366028
4 -0.231524 -0.721172 -0.112007
5 0.438810 0.000225 0.435479
Metode rename () menyediakan file inplaceparameter bernama, yang secara default adalah False dan menyalin data yang mendasarinya. Lulusinplace=True untuk mengganti nama data di tempat.