Pandas & NumPy Academy · Oppitunti

Indeksin asettaminen ja palauttaminen

Muuntaa sarake rivien indeksiksi set_index()-menetelmällä, palauttakaa se reset_index()-menetelmällä ja tutustukaa MultiIndex-indeksiin.

Oppitunti 4/413 vaihetta

Indeksin asettaminen ja palauttaminen on ilmainen Pandas & NumPy Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Pandas & NumPy Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.

Mikä on DataFramen indeksi?

Jokaisella Pandas DataFramella on rivi-indeksi — joukko kuhunkin riviin liitettyjä tunnisteita. Oletusindeksi on RangeIndex (0, 1, 2, …), mutta voitte korvata sen millä tahansa sarakkeella, joka toimii luonnollisena tunnisteena: päivämäärällä, tuotetunnuksella, käyttäjätunnuksella tai millä tahansa yksilöllisellä avaimella. Merkityksellinen indeksi parantaa luettavuutta, mahdollistaa tunnisteisiin perustuvan viipaloinnin ja on välttämätön aikasarjojen uudelleenotannassa.

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() — sarakkeen muuttaminen indeksiksi

DataFrame.set_index('col') muuttaa määritetyn sarakkeen rivi-indeksiksi ja poistaa sen tavallisista sarakkeista. Sarakkeen arvoista tulee rivitunnisteita. Tämä on tavallinen tapa tehdä DataFramesta ilmaisuvoimaisempi, kun yksi sarake toimii luonnollisena avaimena. Menetelmä palauttaa uuden DataFramen; alkuperäinen säilyy muuttumattomana, ellei käytössä ole inplace=True.

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

Rivien valitseminen mukautetun indeksin avulla

Kun merkityksellinen sarake on asetettu indeksiksi, voitte noutaa rivejä tunnisteen perusteella komennolla .loc[label] selkeällä ja luettavalla syntaksilla — totuusarvomaskia ei tarvita. DatetimeIndex-indeksissä voitte käyttää jopa osittaisia päivämäärämerkkijonoja, kuten df.loc['2024-01'], valitaksenne kaikki tammikuun 2024 rivit.

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() useilla sarakkeilla — MultiIndex

Kun välitätte luettelon sarakenimiä set_index()-menetelmälle, se luo MultiIndex-indeksin (hierarkkisen indeksin). Tuloksena olevaan DataFrameen voi viitata monikoilla komennossa .loc[]. MultiIndex on välttämätön ryhmitellyissä aikasarjoissa (alue + päivämäärä), paneelidatassa (kohde + aika) ja kaikessa analyysissä, jossa rivejä on ryhmiteltävä kahdella tasolla.

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

drop=-parametri set_index()-menetelmässä

Oletusarvoisesti set_index('col') poistaa sarakkeen DataFramen tavallisista sarakkeista, kun siitä tulee indeksi. Välittäkää drop=False, jos haluatte säilyttää sarakkeen ja käyttää sitä samalla indeksinä. Tästä on joskus hyötyä, kun haluatte tunnisteisiin perustuvan käytön mutta tarvitsette saraketta myös tavallisten sarakkeiden joukossa tehtäviin laskutoimituksiin.

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() — indeksin palauttaminen sarakkeeksi

reset_index() on set_index()-menetelmän vastakohta: se siirtää nykyisen rivi-indeksin takaisin tavalliseksi sarakkeeksi ja korvaa indeksin oletusarvoisella RangeIndex-indeksillä. Tätä tarvitaan usein groupby().agg()-kutsun jälkeen tai sellaisten operaatioiden jälkeen, joissa käyttöön jää merkityksellinen indeksi, jota tarvitaan myöhemmässä käsittelyssä sarakkeena.

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)

Kun välitätte reset_index()-menetelmälle parametrin drop=True, nykyinen indeksi hylätään kokonaan eikä sitä siirretä sarakkeeksi. Käyttäkää tätä, kun nykyinen indeksi ei sisällä merkityksellistä tietoa, esimerkiksi rivien suodattamisen jälkeen, jolloin indeksissä on aukkoja kuten 0, 3 ja 7, ja haluatte vain uuden siististi nollasta alkavan peräkkäisen indeksin.

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() groupby-kutsun jälkeen

groupby().agg()-kutsun jälkeen ryhmittelyavaimista tulee indeksi. Kutsulla reset_index() ne muunnetaan takaisin tavallisiksi sarakkeiksi, jolloin tuloksena on tasomainen taulukko, jota on helpompi käsitellä, yhdistää tai viedä muualle. Tämä on yksi reset_index()-menetelmän yleisimmistä käyttötavoista.

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() indeksin nimeä varten

Kun rivi-indeksillä ei ole nimeä tai haluatte nimetä sen uudelleen selkeyden vuoksi, käyttäkää komentoa df.rename_axis('new_name') (rivi-indeksille) tai df.rename_axis('col_name', axis=1) (sarakkeiden akselille). Merkityksellinen indeksin nimi tekee tulosteesta itsensä paremmin dokumentoivan, erityisesti CSV-tiedostoon vietäessä, jolloin indeksin nimestä tulee sarakeotsikko.

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

Uudelleenindeksointi aukkojen täyttämiseksi

DataFrame.reindex(new_index) muotoilee DataFramen vastaamaan uutta indeksiä ja täyttää uudessa indeksissä olevat mutta alkuperäisistä tiedoista puuttuvat kohdat NaN-arvoilla. Tätä käytetään DataFramejen kohdistamiseen yhteiseen täydelliseen indeksiin — esimerkiksi varmistamaan, että jokainen vuoden kuukausi näkyy, vaikka joiltakin kuukausilta ei olisi tietoja.

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

MultiIndexin reset_index ja tasojen valinta

MultiIndex-DataFramessa reset_index() siirtää oletusarvoisesti kaikki tasot takaisin sarakkeiksi. Parametrilla level= voitte palauttaa vain tietyt tasot. Tämä on hyödyllistä, kun haluatte säilyttää yhden tason indeksinä, esimerkiksi päivämäärän, ja siirtää vain toisen tason sarakkeeksi.

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

Pikatarkistus

Testatkaa ymmärrystänne indeksin asettamisesta ja palauttamisesta.

Oppitunnin yhteenveto

Tässä oppitunnissa opitte, että set_index('col') muuttaa sarakkeen rivi-indeksiksi tunnisteisiin perustuvaa käyttöä varten, luettelon välittäminen luo MultiIndex-indeksin ja reset_index() siirtää indeksin takaisin sarakkeeksi (käyttäkää drop=True, jos haluatte hylätä sen). Käyttäkää reindex()-menetelmää kohdistamiseen täydelliseen kohdeindeksiin, jolloin puuttuvat kohdat täytetään NaN-arvoilla. Nämä tekniikat ovat tulevien GroupBy- ja yhdistämisoppituntien perusta.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Indeksin asettaminen ja palauttaminen” ilmainen?

Kyllä – oppitunnin ”Indeksin asettaminen ja palauttaminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Pandas & NumPy Academy-kurssin, päivitä CoddyKit PROhon. Pandas & NumPy Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Indeksin asettaminen ja palauttaminen”?

Muuntaa sarake rivien indeksiksi set_index()-menetelmällä, palauttakaa se reset_index()-menetelmällä ja tutustukaa MultiIndex-indeksiin. Harjoittelet Pandas & NumPy Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Pandas & NumPy Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Pandas & NumPy Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Indeksin asettaminen ja palauttaminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Pandas & NumPy Academy-oppitunnilla?

Kyllä. Jokainen Pandas & NumPy Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Järjestäminen sarakearvojen perusteella
  2. Järjestäminen indeksin perusteella
  3. Arvojen järjestäminen
  4. Indeksin asettaminen ja palauttaminen
← Takaisin: Pandas & NumPy Academy