Dividere Pandas DataFrame

Suraj Joshi 26 aprile 2021
  1. Dividi DataFrame utilizzando l’indicizzazione delle righe
  2. Split DataFrame utilizzando il metodo groupby()
  3. Split DataFrame usando il metodo sample()
Dividere Pandas DataFrame

Questo tutorial spiega come possiamo dividere un DataFrame in più DataFrame più piccoli usando l’indicizzazione delle righe, il metodo DataFrame.groupby() e il metodo DataFrame.sample().

Useremo il DataFrame apprix_df di seguito per spiegare come possiamo dividere un DataFrame in più DataFrame più piccoli.

import pandas as pd

apprix_df = pd.DataFrame(
    {
        "Name": ["Anish", "Rabindra", "Manish", "Samir", "Binam"],
        "Post": ["CEO", "CTO", "System Admin", "Consultant", "Engineer"],
        "Qualification": ["MBA", "MS", "MCA", "PhD", "BE"],
    }
)

print("Apprix Team DataFrame:")
print(apprix_df, "\n")

Produzione:

Apprix Team DataFrame:
       Name          Post Qualification
0     Anish           CEO           MBA
1  Rabindra           CTO            MS
2    Manish  System Admin           MCA
3     Samir    Consultant           PhD
4     Binam      Engineer            BE

Dividi DataFrame utilizzando l’indicizzazione delle righe

import pandas as pd

apprix_df = pd.DataFrame(
    {
        "Name": ["Anish", "Rabindra", "Manish", "Samir", "Binam"],
        "Post": ["CEO", "CTO", "System Admin", "Consultant", "Engineer"],
        "Qualification": ["MBA", "MS", "MCA", "PhD", "BE"],
    }
)

print("Apprix Team DataFrame:")
print(apprix_df, "\n")

apprix_1 = apprix_df.iloc[:2, :]
apprix_2 = apprix_df.iloc[2:, :]

print("The DataFrames formed by splitting of Apprix Team DataFrame are: ", "\n")
print(apprix_1, "\n")
print(apprix_2, "\n")

Produzione:

Apprix Team DataFrame:
       Name          Post Qualification
0     Anish           CEO           MBA
1  Rabindra           CTO            MS
2    Manish  System Admin           MCA
3     Samir    Consultant           PhD
4     Binam      Engineer            BE

The DataFrames formed by splitting the Apprix Team DataFrame are:

       Name Post Qualification
0     Anish  CEO           MBA
1  Rabindra  CTO            MS

     Name          Post Qualification
2  Manish  System Admin           MCA
3   Samir    Consultant           PhD
4   Binam      Engineer            BE

Divide il DataFrame apprix_df in due parti utilizzando l’indicizzazione delle righe. La prima parte contiene le prime due righe del DataFrame apprix_df, mentre la seconda parte contiene le ultime tre righe.

Possiamo specificare le righe da includere in ogni divisione nella proprietà iloc. [:2,:] rappresenta selezionare le righe fino alla riga con indice 2 esclusivo (la riga con indice 2 non è inclusa) e tutte le colonne dal DataFrame. Quindi, apprix_df.iloc[:2,:] seleziona le prime due righe dal DataFrame apprix_df con indice 0 e 1.

Split DataFrame utilizzando il metodo groupby()

import pandas as pd

apprix_df = pd.DataFrame(
    {
        "Name": ["Anish", "Rabindra", "Manish", "Samir", "Binam"],
        "Post": ["CEO", "CTO", "System Admin", "Consultant", "Engineer"],
        "Qualification": ["MBA", "MS", "MS", "PhD", "MS"],
    }
)

print("Apprix Team DataFrame:")
print(apprix_df, "\n")

groups = apprix_df.groupby(apprix_df.Qualification)
ms_df = groups.get_group("MS")
mba_df = groups.get_group("MBA")
phd_df = groups.get_group("PhD")

print("Group with Qualification MS:")
print(ms_df, "\n")

print("Group with Qualification MBA:")
print(mba_df, "\n")

print("Group with Qualification PhD:")
print(phd_df, "\n")

Produzione:

Apprix Team DataFrame:
       Name          Post Qualification
0     Anish           CEO           MBA
1  Rabindra           CTO            MS
2    Manish  System Admin            MS
3     Samir    Consultant           PhD
4     Binam      Engineer            MS

Group with Qualification MS:
       Name          Post Qualification
1  Rabindra           CTO            MS
2    Manish  System Admin            MS
4     Binam      Engineer            MS

Group with Qualification MBA:
    Name Post Qualification
0  Anish  CEO           MBA

Group with Qualification PhD:
    Name        Post Qualification
3  Samir  Consultant           PhD

Divide il DataFrame apprix_df in tre parti in base al valore della colonna Qualification. Le righe con lo stesso valore della colonna Qualification verranno inserite nello stesso gruppo.

La funzione groupby() formerà gruppi basati sul valore della colonna Qualification. Quindi estraiamo le righe raggruppate con il metodo groupby() utilizzando il metodo get_group().

Split DataFrame usando il metodo sample()

Possiamo formare un DataFrame campionando le righe in modo casuale da un DataFrame usando il metodo sample(). Possiamo impostare il rapporto tra le righe da campionare dal DataFrame padre.

import pandas as pd

apprix_df = pd.DataFrame(
    {
        "Name": ["Anish", "Rabindra", "Manish", "Samir", "Binam"],
        "Post": ["CEO", "CTO", "System Admin", "Consultant", "Engineer"],
        "Qualification": ["MBA", "MS", "MS", "PhD", "MS"],
    }
)

print("Apprix Team DataFrame:")
print(apprix_df, "\n")

random_df = apprix_df.sample(frac=0.4, random_state=60)

print("Random split from the Apprix Team DataFrame:")
print(random_df)

Produzione:

Apprix Team DataFrame:
       Name          Post Qualification
0     Anish           CEO           MBA
1  Rabindra           CTO            MS
2    Manish  System Admin            MS
3     Samir    Consultant           PhD
4     Binam      Engineer            MS

Random split from the Apprix Team DataFrame:
    Name      Post Qualification
0  Anish       CEO           MBA
4  Binam  Engineer            MS

Campiona casualmente il 40% delle righe dal DataFrame apprix_df e quindi visualizza il DataFrame formato dalle righe campionate. random_state è impostato per garantire che otteniamo gli stessi campioni casuali durante il campionamento ogni volta.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Articolo correlato - Pandas DataFrame