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.