Pandas & NumPy Academy · Pelajaran

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.

Pelajaran 4 daripada 413 langkah

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: int64

set_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 = 150

Parameter 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     30

reset_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 restored

reset_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         300

Pengindeksan 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.0

reset_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      220

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

Percuma untuk bermula

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

  1. Mengisih Mengikut Nilai Lajur
  2. Mengisih Mengikut Indeks
  3. Menentukan Kedudukan Nilai
  4. Menetapkan dan Menetapkan Semula Indeks
← Kembali ke Pandas & NumPy Academy