HOWTO · Pandas

Split Pandas DataFrame

Este tutorial explica como podemos dividir um DataFrame em vários DataFrames de menor dimensão.

Nesta página

Este tutorial explica como podemos dividir um DataFrame em vários DataFrames mais pequenos utilizando indexação de linhas, DataFrame.groupby() método, e DataFrame.sample() método.

Utilizaremos o apprix_df DataFrame abaixo para explicar como podemos dividir um DataFrame em vários DataFrames mais pequenos.

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

Resultado:

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

Split DataFrame utilizando a indexação de linhas

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

Resultado:

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 a DataFrame apprix_df em duas partes utilizando a indexação de linhas. A primeira parte contém as duas primeiras linhas do apprix_df DataFrame, enquanto a segunda parte contém as três últimas linhas.

Podemos especificar as filas a serem incluídas em cada divisão na propriedade iloc. [:2,:] representa a selecção das linhas até à linha com índice 2 exclusivo (a linha com índice 2 não está incluída) e todas as colunas da DataFrame. Assim, apprix_df.iloc[:2,:] selecciona as duas primeiras linhas da DataFrame apprix_df com índice 0 e 1.

Dividir DataFrame utilizando o groupby() Método

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

Resultado:

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 a DataFrame apprix_df em três partes com base no valor da coluna Qualification. As filas com o mesmo valor da coluna Qualification serão colocadas no mesmo grupo.

A função groupby() formará grupos com base no valor da coluna Qualification. Extraímos então as linhas agrupadas pelo método groupby() utilizando o método get_group().

Dividir DataFrame utilizando o método sample()

Podemos formar um DataFrame através de linhas de amostragem aleatórias a partir de um DataFrame utilizando o método sample(). Podemos definir o rácio de linhas a serem amostradas a partir do DataFrame pai.

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)

Resultado:

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

Amostras aleatórias de 40% das linhas do apprix_df DataFrame e depois mostra o DataFrame formado a partir das linhas amostradas. O random_state é definido para garantir que obtemos sempre as mesmas amostras aleatórias na amostragem.