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ỗ.