Python Pandas - Lập chỉ mục lại

Reindexingthay đổi nhãn hàng và nhãn cột của DataFrame. Lập chỉ mục lại có nghĩa là để dữ liệu phù hợp với một tập hợp các nhãn nhất định dọc theo một trục cụ thể.

Nhiều hoạt động có thể được thực hiện thông qua lập chỉ mục như -

  • Sắp xếp lại dữ liệu hiện có để khớp với một tập hợp nhãn mới.

  • Chèn các điểm đánh dấu giá trị bị thiếu (NA) vào các vị trí nhãn nơi không có dữ liệu cho nhãn.

Thí dụ

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

Nó là output như sau -

A    C     B
0  2016-01-01  Low   NaN
2  2016-01-03  High  NaN
5  2016-01-06  Low   NaN

Reindex để căn chỉnh với các đối tượng khác

Bạn có thể muốn lấy một đối tượng và lập chỉ mục lại các trục của nó để được gắn nhãn giống với một đối tượng khác. Hãy xem xét ví dụ sau để hiểu tương tự.

Thí dụ

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

Nó là output như sau -

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 - Đây, df1 DataFrame được thay đổi và lập chỉ mục lại như df2. Các tên cột phải được trùng khớp nếu không NAN sẽ được thêm vào cho toàn bộ nhãn cột.

Làm đầy trong khi ReIndexing

reindex() nhận một phương thức tham số tùy chọn là một phương thức điền với các giá trị như sau:

  • pad/ffill - Điền giá trị về phía trước

  • bfill/backfill - Điền lùi các giá trị

  • nearest - Điền từ các giá trị chỉ mục gần nhất

Thí dụ

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')

Nó là output như sau -

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 - Bốn hàng cuối cùng được đệm.

Giới hạn điền trong khi lập chỉ mục lại

Đối số giới hạn cung cấp kiểm soát bổ sung đối với việc điền trong khi lập chỉ mục lại. Giới hạn chỉ định số lượng trận đấu liên tiếp tối đa. Chúng ta hãy xem xét ví dụ sau để hiểu giống nhau -

Thí dụ

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)

Nó là output như sau -

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- Quan sát, chỉ hàng thứ 7 được tô bởi hàng thứ 6 liền trước. Sau đó, các hàng được giữ nguyên như cũ.

Đổi tên

Phương thức rename () cho phép bạn gắn nhãn lại một trục dựa trên một số ánh xạ (một dict hoặc Chuỗi) hoặc một hàm tùy ý.

Chúng ta hãy xem xét ví dụ sau để hiểu điều này -

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'})

Nó là output như sau -

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

Phương thức rename () cung cấp một inplacetham số được đặt tên, theo mặc định là Sai và sao chép dữ liệu cơ bản. Vượt quainplace=True để đổi tên dữ liệu tại chỗ.