Menetapkan dan Menetapkan Semula Indeks
Naikkan lajur menjadi indeks baris dengan set_index(), tetapkan semula kepada keadaan asal dengan reset_index() dan gunakan gambaran keseluruhan MultiIndex.
Menetapkan dan Menetapkan Semula Indeks ialah pelajaran Pandas & NumPy Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pandas & NumPy Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pandas & NumPy Academy merangkumi sejumlah 4 pelajaran.
Apakah Itu Indeks DataFrame?
Setiap DataFrame Pandas mempunyai indeks baris — satu set label yang dilampirkan pada setiap baris. Indeks lalai ialah RangeIndex (0, 1, 2, …), tetapi anda boleh menggantikannya dengan mana-mana lajur yang bertindak sebagai pengecam semula jadi: tarikh, ID produk, ID pengguna atau sebarang kunci unik. Indeks yang bermakna meningkatkan kebolehbacaan, membolehkan penghirisan berasaskan label dan diperlukan untuk pensampelan semula siri masa.
import pandas as pd
df = pd.DataFrame({
'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
'sales': [100, 200, 150]
})
print('Default index:', df.index.tolist()) # [0, 1, 2]
print(df)set_index() — Menaikkan Lajur
DataFrame.set_index('col') menaikkan lajur yang ditentukan untuk menjadi indeks baris dan mengeluarkannya daripada lajur biasa. Nilai lajur tersebut menjadi label baris. Ini ialah cara standard untuk menjadikan DataFrame lebih bermakna apabila satu lajur bertindak sebagai kunci semula jadi. DataFrame baharu dikembalikan; DataFrame asal tidak berubah melainkan inplace=True digunakan.
import pandas as pd
df = pd.DataFrame({
'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
'sales': [100, 200, 150]
})
df = df.set_index('date')
print(df)
# sales
# date
# 2024-01-01 100
# 2024-01-02 200
# 2024-01-03 150
print(df.index) # Index(['2024-01-01', ...], dtype='object', name='date')Memilih Baris dengan Indeks Tersuai
Setelah lajur yang bermakna dijadikan indeks, anda boleh menggunakan .loc[label] untuk mendapatkan semula baris mengikut label dengan sintaks yang kemas dan mudah dibaca — tanpa memerlukan topeng boolean. Untuk DatetimeIndex, anda juga boleh menggunakan rentetan tarikh separa seperti df.loc['2024-01'] untuk memilih semua baris pada Januari 2024.
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C'],
'price': [10, 20, 30],
'stock': [100, 50, 75]
})
df = df.set_index('product')
# Access row by label
print(df.loc['B'])
# price 20
# stock 50
# Name: B, dtype: int64set_index() dengan Berbilang Lajur — MultiIndex
Menghantar senarai nama lajur kepada set_index() akan mencipta MultiIndex (indeks hierarki). DataFrame yang terhasil boleh dicapai menggunakan tupel dalam .loc[]. MultiIndex penting untuk siri masa berkumpulan (rantau + tarikh), data panel (subjek + masa) dan apa-apa analisis yang memerlukan pengumpulan baris dua aras.
import pandas as pd
df = pd.DataFrame({
'region': ['East', 'East', 'West', 'West'],
'year': [2023, 2024, 2023, 2024],
'revenue': [100, 150, 200, 220]
})
df = df.set_index(['region', 'year'])
print(df)
# revenue
# region year
# East 2023 100
# 2024 150
# West 2023 200
# 2024 220
print(df.loc[('East', 2024)]) # revenue = 150Parameter drop= dalam set_index()
Secara lalai, set_index('col') mengeluarkan lajur daripada lajur biasa DataFrame apabila lajur itu dijadikan indeks. Hantarkan drop=False untuk mengekalkan lajur tersebut sambil menggunakannya sebagai indeks. Hal ini kadangkala berguna apabila anda mahukan capaian berasaskan label tetapi masih memerlukan lajur itu untuk pengiraan dalam ruang lajur biasa.
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 3], 'value': [10, 20, 30]})
# Keep 'id' as both index and column
df_with_both = df.set_index('id', drop=False)
print(df_with_both)
# id value
# id
# 1 1 10
# 2 2 20
# 3 3 30reset_index() — Memindahkan Indeks Kembali kepada Lajur
reset_index() ialah songsangan kepada set_index(): kaedah ini memindahkan indeks baris semasa kembali menjadi lajur biasa dan menggantikan indeks itu dengan RangeIndex lalai. Hal ini biasanya diperlukan selepas groupby().agg() atau selepas operasi yang meninggalkan anda dengan indeks bermakna yang perlu digunakan sebagai lajur dalam pemprosesan seterusnya.
import pandas as pd
df = pd.DataFrame({'sales': [100, 200]}, index=['East', 'West'])
df.index.name = 'region'
reset = df.reset_index()
print(reset)
# region sales
# 0 East 100
# 1 West 200
print(reset.index.tolist()) # [0, 1] — default RangeIndex restoredreset_index(drop=True)
Menghantar drop=True kepada reset_index() akan membuang indeks semasa sepenuhnya dan bukannya memindahkannya ke lajur. Gunakan pilihan ini apabila indeks semasa tidak mengandungi maklumat yang bermakna (contohnya, selepas menapis baris, indeks mempunyai jurang seperti 0, 3, 7) dan anda hanya mahukan indeks berjujukan yang kemas bermula dari 0.
import pandas as pd
df = pd.DataFrame({'x': [10, 20, 30, 40, 50]})
filtered = df[df['x'] > 15]
print('Filtered index:', filtered.index.tolist()) # [1, 2, 3, 4]
# Drop the old index — don't move it to a column
clean = filtered.reset_index(drop=True)
print('Clean index:', clean.index.tolist()) # [0, 1, 2, 3]reset_index() Selepas groupby
Selepas memanggil groupby().agg(), kunci kumpulan menjadi indeks. Memanggil reset_index() menukarkannya kembali kepada lajur biasa, lalu menghasilkan hasil jadual rata yang lebih mudah digunakan, digabungkan atau dieksport. Ini ialah salah satu kegunaan reset_index() yang paling lazim dalam amalan.
import pandas as pd
df = pd.DataFrame({
'dept': ['Eng', 'HR', 'Eng', 'Sales', 'HR'],
'salary': [90000, 50000, 80000, 70000, 55000]
})
# After groupby, dept becomes the index
agg = df.groupby('dept')['salary'].mean()
print(type(agg), agg.index.tolist())
# dept is the index
# Reset makes dept a regular column again
result = agg.reset_index()
result.columns = ['dept', 'avg_salary']
print(result)rename_axis() untuk Nama Indeks
Apabila indeks baris tidak mempunyai nama, atau apabila anda mahu menamakannya semula supaya lebih jelas, gunakan df.rename_axis('new_name') (untuk indeks baris) atau df.rename_axis('col_name', axis=1) (untuk paksi lajur). Memberikan indeks nama yang bermakna menjadikan output lebih mudah difahami, terutamanya apabila mengeksport ke CSV kerana nama indeks menjadi pengepala lajur.
import pandas as pd
df = pd.DataFrame({'sales': [100, 200, 300]}, index=['A', 'B', 'C'])
print(df.index.name) # None
# Name the index
df = df.rename_axis('region')
print(df)
# sales
# region
# A 100
# B 200
# C 300Pengindeksan Semula untuk Mengisi Jurang
DataFrame.reindex(new_index) membentuk semula DataFrame agar sepadan dengan indeks baharu, dengan mengisi kedudukan yang wujud dalam indeks baharu tetapi tiada dalam data asal dengan NaN. Hal ini digunakan untuk menjajarkan DataFrames kepada indeks lengkap yang sama — contohnya, memastikan setiap bulan dalam setahun dipaparkan walaupun tiada data untuk sesetengah bulan.
import pandas as pd
df = pd.DataFrame({
'month': ['Jan', 'Mar', 'Jun'],
'revenue': [100, 200, 300]
}).set_index('month')
all_months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
complete = df.reindex(all_months)
print(complete)
# revenue
# Jan 100.0
# Feb NaN <- filled with NaN
# Mar 200.0
# Apr NaN
# May NaN
# Jun 300.0reset_index dan Pemilihan Aras MultiIndex
Untuk DataFrame MultiIndex, reset_index() secara lalai memindahkan semua aras kembali kepada lajur. Hantarkan level= untuk menetapkan semula aras tertentu sahaja. Hal ini berguna apabila anda mahu mengekalkan satu aras sebagai indeks (contohnya, mengekalkan tarikh sebagai indeks) dan memindahkan aras yang lain sahaja kepada lajur.
import pandas as pd
df = pd.DataFrame(
{'revenue': [100, 150, 200, 220]},
index=pd.MultiIndex.from_tuples(
[('East', 2023), ('East', 2024), ('West', 2023), ('West', 2024)],
names=['region', 'year']
)
)
# Reset only the 'year' level, keep 'region' as index
df2 = df.reset_index(level='year')
print(df2)
# year revenue
# region
# East 2023 100
# East 2024 150
# West 2023 200
# West 2024 220Semakan Pantas
Uji pemahaman anda tentang menetapkan dan menetapkan semula indeks.
Ringkasan Pelajaran
Dalam pelajaran ini, anda telah mempelajari bahawa: set_index('col') menaikkan lajur menjadi indeks baris untuk capaian berasaskan label, menghantar senarai akan mencipta MultiIndex, dan reset_index() memindahkan indeks kembali kepada lajur (gunakan drop=True untuk membuangnya). Gunakan reindex() untuk menjajarkan data kepada indeks sasaran lengkap dengan mengisi kedudukan yang hilang menggunakan NaN. Teknik ini merupakan asas untuk pelajaran GroupBy dan Penggabungan yang akan datang.
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Menetapkan dan Menetapkan Semula Indeks” percuma?
Ya — teks penuh “Menetapkan dan Menetapkan Semula Indeks” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Pandas & NumPy Academy, tingkat taraf kepada CoddyKit PRO. Kursus Pandas & NumPy Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menetapkan dan Menetapkan Semula Indeks”?
Naikkan lajur menjadi indeks baris dengan set_index(), tetapkan semula kepada keadaan asal dengan reset_index() dan gunakan gambaran keseluruhan MultiIndex. Anda berlatih Pandas & NumPy Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Pandas & NumPy Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Pandas & NumPy Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Menetapkan dan Menetapkan Semula Indeks” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pandas & NumPy Academy ini?
Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mengisih Mengikut Nilai Lajur
- Mengisih Mengikut Indeks
- Menentukan Kedudukan Nilai
- Menetapkan dan Menetapkan Semula Indeks