terça-feira, 20 de abril de 2021

Python - Juntando strings/lista com um delimitador com o método Series.str.join()

O método Series.str.join() do pandas é usado para juntar todos os elementos na lista presente em uma série com o delimitador passado. Como as strings também são uma matriz de caracteres (ou Lista de caracteres), portanto, quando esse método é aplicado a uma série de strings, a string é unida a cada caractere com o delimitador passado.

.str deve ser prefixado sempre antes de chamar este método para diferenciá-lo do método de string padrão do Python.

Sintaxe: Series.str.join(sep)

Parâmetro:

  • sep: recebe uma string, junta os elementos com a string entre eles

Tipo de retorno: Uma Series com os elementos juntos

Para baixar o arquivo csv utilizado, clique aqui.

Nos exemplos a seguir, o DataFrame usado contém dados de alguns jogadores da NBA. Você pode ver as dez primeiras linhas do DataFrame, antes de ser feita qualquer alteração nele, abaixo.

            Name            Team  Number Position   Age Height  Weight            College      Salary
0  Avery Bradley  Boston Celtics     0.0       PG  25.0    6-2   180.0              Texas   7730337.0
1    Jae Crowder  Boston Celtics    99.0       SF  25.0    6-6   235.0          Marquette   6796117.0
2   John Holland  Boston Celtics    30.0       SG  27.0    6-5   205.0  Boston University         NaN
3    R.J. Hunter  Boston Celtics    28.0       SG  22.0    6-5   185.0      Georgia State   1148640.0
4  Jonas Jerebko  Boston Celtics     8.0       PF  29.0   6-10   231.0                NaN   5000000.0
5   Amir Johnson  Boston Celtics    90.0       PF  29.0    6-9   240.0                NaN  12000000.0
6  Jordan Mickey  Boston Celtics    55.0       PF  21.0    6-8   235.0                LSU   1170960.0
7   Kelly Olynyk  Boston Celtics    41.0        C  25.0    7-0   238.0            Gonzaga   2165160.0
8   Terry Rozier  Boston Celtics    12.0       PG  22.0    6-2   190.0         Louisville   1824360.0
9   Marcus Smart  Boston Celtics    36.0       PG  22.0    6-4   220.0     Oklahoma State   3431040.0

Exemplo #1: juntando elementos de string

Neste exemplo, o método Series.str.join() é usado na coluna Name (Série de String). Conforme discutido anteriormente, uma string também é uma matriz de caracteres e, portanto, cada caractere da string será unido ao separador passado usando o método Series.str.join().

# Importando o pacote pandas
import pandas as pd

# Criando um DataFrame a partir
# de um arquivo csv
data = pd.read_csv("https://media.geeksforgeeks.org/wp-content/uploads/nba.csv")
  
# Descartando valores null para evitar erros
data.dropna(inplace=True)

# Juntando string e sobrescrevendo
data["Name"] = data["Name"].str.join("-")

print(data)

Conforme mostrado abaixo, a string na coluna Name foi unida por caracteres com o separador passado.

                          Name            Team  Number Position   Age Height  Weight        College     Salary
0    A-v-e-r-y- -B-r-a-d-l-e-y  Boston Celtics     0.0       PG  25.0    6-2   180.0          Texas  7730337.0
1        J-a-e- -C-r-o-w-d-e-r  Boston Celtics    99.0       SF  25.0    6-6   235.0      Marquette  6796117.0
3        R-.-J-.- -H-u-n-t-e-r  Boston Celtics    28.0       SG  22.0    6-5   185.0  Georgia State  1148640.0
6    J-o-r-d-a-n- -M-i-c-k-e-y  Boston Celtics    55.0       PF  21.0    6-8   235.0            LSU  1170960.0
7      K-e-l-l-y- -O-l-y-n-y-k  Boston Celtics    41.0        C  25.0    7-0   238.0        Gonzaga  2165160.0
..                         ...             ...     ...      ...   ...    ...     ...            ...        ...
449      R-o-d-n-e-y- -H-o-o-d       Utah Jazz     5.0       SG  23.0    6-8   206.0           Duke  1348440.0
451  C-h-r-i-s- -J-o-h-n-s-o-n       Utah Jazz    23.0       SF  26.0    6-6   206.0         Dayton   981348.0
452        T-r-e-y- -L-y-l-e-s       Utah Jazz    41.0       PF  20.0   6-10   234.0       Kentucky  2239800.0
453    S-h-e-l-v-i-n- -M-a-c-k       Utah Jazz     8.0       PG  26.0    6-3   203.0         Butler  2433333.0
456      J-e-f-f- -W-i-t-h-e-y       Utah Jazz    24.0        C  26.0    7-0   231.0         Kansas   947276.0

[364 rows x 9 columns]

Neste exemplo, o método Series.str.join() é aplicado a uma série de listas. Os dados na coluna Team são separados em uma lista usando o método Series.str.split().

# Importando o pacote pandas
import pandas as pd

# Criando um DataFrame a partir
# de um arquivo csv
data = pd.read_csv("https://media.geeksforgeeks.org/wp-content/uploads/nba.csv")
  
# Descartando valores null para evitar erros
data.dropna(inplace=True)

# Dividindo string e sobrescrevendo
data["Team"] = data["Team"].str.split("t")

# juntando com "_"
data["Team"] = data["Team"].str.join("_")

print(data)

Conforme mostrado na saída abaixo, os dados foram divididos em lista usando Series.str.split() e, em seguida, a lista foi unida usando Series.str.join() com o separador “_”.

              Name            Team  Number Position   Age Height  Weight        College     Salary
0    Avery Bradley  Bos_on Cel_ics     0.0       PG  25.0    6-2   180.0          Texas  7730337.0
1      Jae Crowder  Bos_on Cel_ics    99.0       SF  25.0    6-6   235.0      Marquette  6796117.0
3      R.J. Hunter  Bos_on Cel_ics    28.0       SG  22.0    6-5   185.0  Georgia State  1148640.0
6    Jordan Mickey  Bos_on Cel_ics    55.0       PF  21.0    6-8   235.0            LSU  1170960.0
7     Kelly Olynyk  Bos_on Cel_ics    41.0        C  25.0    7-0   238.0        Gonzaga  2165160.0
..             ...             ...     ...      ...   ...    ...     ...            ...        ...
449    Rodney Hood       U_ah Jazz     5.0       SG  23.0    6-8   206.0           Duke  1348440.0
451  Chris Johnson       U_ah Jazz    23.0       SF  26.0    6-6   206.0         Dayton   981348.0
452     Trey Lyles       U_ah Jazz    41.0       PF  20.0   6-10   234.0       Kentucky  2239800.0
453   Shelvin Mack       U_ah Jazz     8.0       PG  26.0    6-3   203.0         Butler  2433333.0
456    Jeff Withey       U_ah Jazz    24.0        C  26.0    7-0   231.0         Kansas   947276.0

[364 rows x 9 columns]

Artigo escrito por Kartikaybhutani e traduzido por Acervolima de Python | Pandas str.join() to join string/list elements with passed delimiter.

Licença

Python - Utilizando o método Series.str.cat() do pandas para concatenar strings

O método Series.str.cat() é usado para concatenar strings para a série de strings passada pelo chamador. Valores distintos de uma série diferente podem ser transmitidos, mas o comprimento de ambas as séries deve ser o mesmo. .str deve ser prefixado para diferenciá-lo do método padrão do Python.

Sintaxe: Series.str.cat(others=None, sep=None, na_rep=None)

Parâmetros:

  • others: Série, índice, dataframe ou lista de strings para concatenar
  • sep: Separador a ser colocado entre as duas strings
  • bna_rep: None ou valor de string para substituir no lugar de valores nulos

Tipo de retorno: Série com valores de string concatenados

Para baixar o arquivo csv utilizado, clique aqui.

Nos exemplos a seguir, o DataFrame usado contém dados sobre alguns jogadores da NBA. A imagem do DataFrame antes de qualquer operação é anexada abaixo.

Exemplo #1: Coluna de concatenação com separador

Neste exemplo, a coluna Team é concatenada no final da coluna Name com o separador ",". A coluna Name é substituída pela nova série e o DataFrame é exibido.

# Importando o pacote pandas
import pandas as pd

# Criando um DataFrame a partir
# de um arquivo csv
data = pd.read_csv("https://media.geeksforgeeks.org/wp-content/uploads/nba.csv")

# Fazendo uma copia da coluna Team
new = data["Team"].copy()

# concatenando a coluna Team com a coluna Name
# e sobrescrevendo a coluna Name
data["Name"] = data["Name"].str.cat(new, sep =", ")
  
print(data)

Conforme mostradon abaixo, cada string na coluna Team com o mesmo índice da string na coluna Name foi concatenada com o separador ",".

Saída:

                              Name            Team  Number Position   Age Height  Weight            College     Salary
0    Avery Bradley, Boston Celtics  Boston Celtics     0.0       PG  25.0    6-2   180.0              Texas  7730337.0
1      Jae Crowder, Boston Celtics  Boston Celtics    99.0       SF  25.0    6-6   235.0          Marquette  6796117.0
2     John Holland, Boston Celtics  Boston Celtics    30.0       SG  27.0    6-5   205.0  Boston University        NaN
3      R.J. Hunter, Boston Celtics  Boston Celtics    28.0       SG  22.0    6-5   185.0      Georgia State  1148640.0
4    Jonas Jerebko, Boston Celtics  Boston Celtics     8.0       PF  29.0   6-10   231.0                NaN  5000000.0
..                             ...             ...     ...      ...   ...    ...     ...                ...        ...
453        Shelvin Mack, Utah Jazz       Utah Jazz     8.0       PG  26.0    6-3   203.0             Butler  2433333.0
454           Raul Neto, Utah Jazz       Utah Jazz    25.0       PG  24.0    6-1   179.0                NaN   900000.0
455        Tibor Pleiss, Utah Jazz       Utah Jazz    21.0        C  26.0    7-3   256.0                NaN  2900000.0
456         Jeff Withey, Utah Jazz       Utah Jazz    24.0        C  26.0    7-0   231.0             Kansas   947276.0
457                            NaN             NaN     NaN      NaN   NaN    NaN     NaN                NaN        NaN

[458 rows x 9 columns]

Exemplo #2: Tratamento de valores nulos

A parte mais importante na análise de dados é lidar com valores nulos. str.cat() fornece uma maneira de lidar com valores nulos por meio do parâmetro na_rep. O que quer que seja passado para este parâmetro será substituído a cada ocorrência de valor nulo.

Neste exemplo, a coluna College é concatenada com a coluna Team. "No college" é passado para o parâmetro na_rep para substituir valores null por esta string.

# Importando o pacote pandas
import pandas as pd

# Criando um DataFrame a partir
# de um arquivo csv
data = pd.read_csv("https://media.geeksforgeeks.org/wp-content/uploads/nba.csv")

# Fazendo uma copia da coluna Team
new = data["Team"].copy()
  
# string para substituir os valores nulos
na_string = "No College"

# concatenando a coluna Team com a coluna Name
# e sobrescrevendo a coluna College
data["College"] = data["College"].str.cat(new, sep=", ", na_rep=na_string)
  
print(data)

Como pode ser visto no DataFrame, nas posições de índice 4 e 5, havia um valor NULL que foi substituído por “No College” e a string da coluna Team foi concatenada com sucesso.

Saída:

              Name            Team  Number Position   Age Height  Weight                            College     Salary
0    Avery Bradley  Boston Celtics     0.0       PG  25.0    6-2   180.0              Texas, Boston Celtics  7730337.0
1      Jae Crowder  Boston Celtics    99.0       SF  25.0    6-6   235.0          Marquette, Boston Celtics  6796117.0
2     John Holland  Boston Celtics    30.0       SG  27.0    6-5   205.0  Boston University, Boston Celtics        NaN
3      R.J. Hunter  Boston Celtics    28.0       SG  22.0    6-5   185.0      Georgia State, Boston Celtics  1148640.0
4    Jonas Jerebko  Boston Celtics     8.0       PF  29.0   6-10   231.0         No College, Boston Celtics  5000000.0
..             ...             ...     ...      ...   ...    ...     ...                                ...        ...
453   Shelvin Mack       Utah Jazz     8.0       PG  26.0    6-3   203.0                  Butler, Utah Jazz  2433333.0
454      Raul Neto       Utah Jazz    25.0       PG  24.0    6-1   179.0              No College, Utah Jazz   900000.0
455   Tibor Pleiss       Utah Jazz    21.0        C  26.0    7-3   256.0              No College, Utah Jazz  2900000.0
456    Jeff Withey       Utah Jazz    24.0        C  26.0    7-0   231.0                  Kansas, Utah Jazz   947276.0
457            NaN             NaN     NaN      NaN   NaN    NaN     NaN             No College, No College        NaN

[458 rows x 9 columns]

Artigo escrito por Kartikaybhutani e traduzido por Acervolima de Python | Pandas Series.str.cat() to concatenate string.

Licença

Python - dividindo strings em duas listas/colunas usando o método Series.str.split() do pandas

Ele funciona de forma semelhante ao método split() padrão do Python, mas esse método só pode ser aplicado a uma string individual. Já o método Series.str.split() do pandas pode ser aplicado a uma série inteira. .str deve ser prefixado todas as vezes antes de chamar este método para diferenciá-lo da função padrão do Python, caso contrário, ele gerará um erro.

Sintaxe: Series.str.split(pat=None, n=-1, expand=False)

Parâmetros:

  • pat: Valor da string, separador ou delimitador para separar a string em.
  • n: Números de separações máximas a serem feitas em uma única string, o padrão é -1, o que significa todas.
  • expand: Valor booleano, retorna um dataframe com valor diferente em colunas diferentes se True. Caso contrário, ele retorna uma série com uma lista de strings.

Tipo de retorno: Série de lista ou Dataframe dependendo do parâmetro expand:

Para baixar o CSV usado no código, clique aqui.

Nos exemplos a seguir, o DataFrame usado contém dados de alguns jogadores da NBA. O DataFrame antes de qualquer operação é mostrado abaixo.

              Name            Team  Number Position   Age Height  Weight            College     Salary
0    Avery Bradley  Boston Celtics     0.0       PG  25.0    6-2   180.0              Texas  7730337.0
1      Jae Crowder  Boston Celtics    99.0       SF  25.0    6-6   235.0          Marquette  6796117.0
2     John Holland  Boston Celtics    30.0       SG  27.0    6-5   205.0  Boston University        NaN
3      R.J. Hunter  Boston Celtics    28.0       SG  22.0    6-5   185.0      Georgia State  1148640.0
4    Jonas Jerebko  Boston Celtics     8.0       PF  29.0   6-10   231.0                NaN  5000000.0
..             ...             ...     ...      ...   ...    ...     ...                ...        ...
453   Shelvin Mack       Utah Jazz     8.0       PG  26.0    6-3   203.0             Butler  2433333.0
454      Raul Neto       Utah Jazz    25.0       PG  24.0    6-1   179.0                NaN   900000.0
455   Tibor Pleiss       Utah Jazz    21.0        C  26.0    7-3   256.0                NaN  2900000.0
456    Jeff Withey       Utah Jazz    24.0        C  26.0    7-0   231.0             Kansas   947276.0
457            NaN             NaN     NaN      NaN   NaN    NaN     NaN                NaN        NaN

[458 rows x 9 columns]

Exemplo #1: Dividindo string em lista

Nestes dados, a função split() é usada para dividir a coluna Team a cada “t”. O parâmetro é definido como 1 e, portanto, o número máximo de separações em uma única string será 1. O parâmetro de expand é False e é por isso que uma série com Lista de strings é retornada em vez de um DataFrame.

# Importa o pacote pandas
import pandas as pd

# Lendo um arquivo csv de uma url 
data = pd.read_csv("https://media.geeksforgeeks.org/wp-content/uploads/nba.csv")

# descartando colunas de valor nulo para evitar erros
data.dropna(inplace = True)

# novo dataframe com colunas de valor dividido
data["Team"] = data["Team"].str.split("t", n=1, expand=True)

print(data)

Conforme mostrado na saída abaixo, a coluna Team agora contém uma lista. A string foi separada na primeira ocorrência de “t” e não na ocorrência posterior, pois o parâmetro n foi definido como 1 (Max 1 separação em uma string).

Saída:

              Name Team  Number Position   Age Height  Weight        College     Salary
0    Avery Bradley  Bos     0.0       PG  25.0    6-2   180.0          Texas  7730337.0
1      Jae Crowder  Bos    99.0       SF  25.0    6-6   235.0      Marquette  6796117.0
3      R.J. Hunter  Bos    28.0       SG  22.0    6-5   185.0  Georgia State  1148640.0
6    Jordan Mickey  Bos    55.0       PF  21.0    6-8   235.0            LSU  1170960.0
7     Kelly Olynyk  Bos    41.0        C  25.0    7-0   238.0        Gonzaga  2165160.0
..             ...  ...     ...      ...   ...    ...     ...            ...        ...
449    Rodney Hood    U     5.0       SG  23.0    6-8   206.0           Duke  1348440.0
451  Chris Johnson    U    23.0       SF  26.0    6-6   206.0         Dayton   981348.0
452     Trey Lyles    U    41.0       PF  20.0   6-10   234.0       Kentucky  2239800.0
453   Shelvin Mack    U     8.0       PG  26.0    6-3   203.0         Butler  2433333.0
456    Jeff Withey    U    24.0        C  26.0    7-0   231.0         Kansas   947276.0

[364 rows x 9 columns]

Exemplo #2: Fazendo colunas separadas de string

Neste exemplo, a coluna Name é separada por espaço (" ") e o parâmetro expand é definido como True, o que significa que ele retornará um DataFrame com todas as strings separadas em colunas diferentes. O DataFrame é então usado para criar novas colunas e a coluna antiga Name é descartada usando o método .drop().

# Importa o pacote pandas
import pandas as pd

# Lendo um arquivo csv de uma url 
data = pd.read_csv("https://media.geeksforgeeks.org/wp-content/uploads/nba.csv")

# descartando colunas de valor nulo para evitar erros
data.dropna(inplace = True)
  
# novo dataframe com colunas de valor dividido
new = data["Name"].str.split(" ", n=1, expand=True)

# separar a coluna de nome do novo dataframe
data["First Name"] = new[0]
  
# separar a coluna de sobrenome do novo dataframe
data["Last Name"] = new[1]
  
# Eliminando a coluna Name antiga
data.drop(columns=["Name"], inplace=True)

print(data)

Conforme mostrado na saída abaixo, um novo dataframe foi retornado pela função split() e foi usado para criar duas novas colunas (Name e Last Name) no dataframe.

Novo DataFrame:

           0        1
0      Avery  Bradley
1        Jae  Crowder
3       R.J.   Hunter
6     Jordan   Mickey
7      Kelly   Olynyk
..       ...      ...
449   Rodney     Hood
451    Chris  Johnson
452     Trey    Lyles
453  Shelvin     Mack
456     Jeff   Withey

[364 rows x 2 columns]

DataFrame com colunas adicionadas:

               Team  Number Position   Age Height  Weight        College     Salary First Name Last Name
0    Boston Celtics     0.0       PG  25.0    6-2   180.0          Texas  7730337.0      Avery   Bradley
1    Boston Celtics    99.0       SF  25.0    6-6   235.0      Marquette  6796117.0        Jae   Crowder
3    Boston Celtics    28.0       SG  22.0    6-5   185.0  Georgia State  1148640.0       R.J.    Hunter
6    Boston Celtics    55.0       PF  21.0    6-8   235.0            LSU  1170960.0     Jordan    Mickey
7    Boston Celtics    41.0        C  25.0    7-0   238.0        Gonzaga  2165160.0      Kelly    Olynyk
..              ...     ...      ...   ...    ...     ...            ...        ...        ...       ...
449       Utah Jazz     5.0       SG  23.0    6-8   206.0           Duke  1348440.0     Rodney      Hood
451       Utah Jazz    23.0       SF  26.0    6-6   206.0         Dayton   981348.0      Chris   Johnson
452       Utah Jazz    41.0       PF  20.0   6-10   234.0       Kentucky  2239800.0       Trey     Lyles
453       Utah Jazz     8.0       PG  26.0    6-3   203.0         Butler  2433333.0    Shelvin      Mack
456       Utah Jazz    24.0        C  26.0    7-0   231.0         Kansas   947276.0       Jeff    Withey

[364 rows x 10 columns]

Artigo escrito por Kartikaybhutani e traduzido por Acervolima de Python | Pandas Split strings into two List/Columns using str.split().

Licença

Python - Extraindo linhas de um DataFrame com o método loc

Pandas fornecem um método exclusivo para recuperar linhas de um DataFrame. O método DataFrame.loc[] é um método que usa apenas rótulos de índice e retorna linha ou dataframe se o rótulo de índice existir no DataFrame do chamador.

Sintaxe: pandas.DataFrame.loc[]

Parâmetros:

  • Index label: String ou lista de string de rótulo de índice de linhas

Tipo de retorno: Dataframe ou Series depende do parâmetro

Para baixar o CSV usado no código, clique aqui.

Exemplo #1: Extraindo uma única linha

Neste exemplo, a coluna Name é definida como a coluna de índice e, em seguida, duas linhas únicas são extraídas uma a uma na forma de série usando rótulo de índice de linhas.

# Importa o pacote pandas
import pandas as pd

# Criando DataFrame a partir de um arquico csv
data = pd.read_csv("nba.csv", index_col="Name")

# recuperar linhas pelo método loc
first = data.loc["Avery Bradley"]
second = data.loc["R.J. Hunter"]

print(first, "\n\n\n", second)

Conforme mostrado na saída abaixo, duas séries foram retornadas, pois havia apenas um parâmetro em ambos as vezes.

Saída:

Team        Boston Celtics        
Number                   0        
Position                PG        
Age                     25        
Height                 6-2        
Weight                 180        
College              Texas        
Salary         7.73034e+06        
Name: Avery Bradley, dtype: object 


 Team        Boston Celtics
Number                  28
Position                SG
Age                     22
Height                 6-5
Weight                 185
College      Georgia State
Salary         1.14864e+06
Name: R.J. Hunter, dtype: object

Exemplo #2: Parâmetros múltiplos

Neste exemplo, a coluna Name é definida como a coluna do índice e, em seguida, duas linhas únicas são extraídas ao mesmo tempo, passando uma lista como parâmetro.

# Importa o pacote pandas
import pandas as pd

# Criando DataFrame a partir de um arquico csv
data = pd.read_csv("nba.csv", index_col="Name")

# recuperar linhas pelo método loc
linhas = data.loc[["Avery Bradley", "R.J. Hunter"]]
  
# Verificando o tipo do objeto linhas
print(type(linhas))

print(linhas)

Conforme mostrado abaixo, desta vez o tipo de dados do valor retornado é um DataFrame. Ambas as linhas foram extraídas e exibidas como um novo DataFrame.

Saída:

<class 'pandas.core.frame.DataFrame'>
                         Team  Number Position   Age Height  Weight        College     Salary
Name
Avery Bradley  Boston Celtics     0.0       PG  25.0    6-2   180.0          Texas  7730337.0
R.J. Hunter    Boston Celtics    28.0       SG  22.0    6-5   185.0  Georgia State  1148640.0

Exemplo #3: Extraindo várias linhas com o mesmo índice

Neste exemplo, a coluna Team é definida como a coluna de índice e um nome da coluna Team é passado para o método .loc para verificar se todos os valores com o mesmo nome da equipe foram retornados ou não.

# Importa o pacote pandas
import pandas as pd

# Criando DataFrame a partir de um arquico csv
data = pd.read_csv("nba.csv", index_col="Team")

# recuperar linhas pelo método loc
linhas = data.loc["Utah Jazz"]

# Verificando o tipo do objeto linhas
print(type(linhas))

print(linhas)

Conforme mostrado na saída do script acima, todas as linhas com o nome da equipe “Utah Jazz” foram retornadas na forma de um dataframe.

Saída:

<class 'pandas.core.frame.DataFrame'>
                     Name  Number Position   Age Height  Weight       College      Salary
Team
Utah Jazz   Trevor Booker    33.0       PF  28.0    6-8   228.0       Clemson   4775000.0
Utah Jazz      Trey Burke     3.0       PG  23.0    6-1   191.0      Michigan   2658240.0
Utah Jazz      Alec Burks    10.0       SG  24.0    6-6   214.0      Colorado   9463484.0
Utah Jazz      Dante Exum    11.0       PG  20.0    6-6   190.0           NaN   3777720.0
Utah Jazz  Derrick Favors    15.0       PF  24.0   6-10   265.0  Georgia Tech  12000000.0
Utah Jazz     Rudy Gobert    27.0        C  23.0    7-1   245.0           NaN   1175880.0
Utah Jazz  Gordon Hayward    20.0       SF  26.0    6-8   226.0        Butler  15409570.0
Utah Jazz     Rodney Hood     5.0       SG  23.0    6-8   206.0          Duke   1348440.0
Utah Jazz      Joe Ingles     2.0       SF  28.0    6-8   226.0           NaN   2050000.0
Utah Jazz   Chris Johnson    23.0       SF  26.0    6-6   206.0        Dayton    981348.0
Utah Jazz      Trey Lyles    41.0       PF  20.0   6-10   234.0      Kentucky   2239800.0
Utah Jazz    Shelvin Mack     8.0       PG  26.0    6-3   203.0        Butler   2433333.0
Utah Jazz       Raul Neto    25.0       PG  24.0    6-1   179.0           NaN    900000.0
Utah Jazz    Tibor Pleiss    21.0        C  26.0    7-3   256.0           NaN   2900000.0
Utah Jazz     Jeff Withey    24.0        C  26.0    7-0   231.0        Kansas    947276.0

Exemplo #4: Extração de linhas entre dois rótulos de índice

Neste exemplo, dois rótulos de índice de linhas são passados e todas as linhas que caem entre esses dois rótulos de índice foram retornadas (Ambos os rótulos de índice inclusivos).

# Importa o pacote pandas
import pandas as pd

# Criando DataFrame a partir de um arquico csv
data = pd.read_csv("nba.csv", index_col="Name")

# recuperar linhas pelo método loc
linhas = data.loc["Avery Bradley":"Isaiah Thomas"]

# Verificando o tipo do objeto linhas
print(type(linhas))

print(linhas)

Conforme mostrado abaixo, todas as linhas que caem entre os dois rótulos de índice passados são retornadas na forma de um DataFrame.

Saída:

<class 'pandas.core.frame.DataFrame'>
                           Team  Number Position   Age Height  Weight            College      Salary
Name
Avery Bradley    Boston Celtics     0.0       PG  25.0    6-2   180.0              Texas   7730337.0
Jae Crowder      Boston Celtics    99.0       SF  25.0    6-6   235.0          Marquette   6796117.0
John Holland     Boston Celtics    30.0       SG  27.0    6-5   205.0  Boston University         NaN
R.J. Hunter      Boston Celtics    28.0       SG  22.0    6-5   185.0      Georgia State   1148640.0
Jonas Jerebko    Boston Celtics     8.0       PF  29.0   6-10   231.0                NaN   5000000.0
Amir Johnson     Boston Celtics    90.0       PF  29.0    6-9   240.0                NaN  12000000.0
Jordan Mickey    Boston Celtics    55.0       PF  21.0    6-8   235.0                LSU   1170960.0
Kelly Olynyk     Boston Celtics    41.0        C  25.0    7-0   238.0            Gonzaga   2165160.0
Terry Rozier     Boston Celtics    12.0       PG  22.0    6-2   190.0         Louisville   1824360.0
Marcus Smart     Boston Celtics    36.0       PG  22.0    6-4   220.0     Oklahoma State   3431040.0
Jared Sullinger  Boston Celtics     7.0        C  24.0    6-9   260.0         Ohio State   2569260.0
Isaiah Thomas    Boston Celtics     4.0       PG  27.0    5-9   185.0         Washington   6912869.0

Artigo escrito por Kartikaybhutani e traduzido por Acervolima de Python | Pandas Extracting rows using .loc[].

Licença

Python - Extraindo linhas de um DataFrame usando iloc

O Pandas fornece um método exclusivo para recuperar linhas de um Dataframe. O método Dataframe.iloc[] é usado quando o rótulo do índice de um dataframe é algo diferente da série numérica de 0, 1, 2, 3… n ou caso o usuário não conheça o rótulo do índice. As linhas podem ser extraídas usando uma posição de índice imaginária que não é visível no dataframe.

Sintaxe: pandas.DataFrame.iloc[]

Parâmetros:

  • Posição do index: Posição do índice de linhas no inteiro ou lista de inteiros.

Tipo de retorno: DataFrame ou Series, dependo do parâmetro

Para baixar o CSV usado no código, clique aqui.

Exemplo #1: Extraindo uma única linha e comparando com .loc[]

Neste exemplo, a mesma linha de número de índice é extraída pelos métodos .iloc[] e .loc[] e comparada. Visto que a coluna do índice por padrão é numérica, portanto, o rótulo do índice também será números inteiros.

# Importa o pacote pandas
import pandas as pd

# Criando DataFrame a partir de um arquico csv
data = pd.read_csv("nba.csv")

# recuperar linhas pelo método loc 
linha1 = data.loc[3]
  
# recuperar linhas pelo método iloc
linha2 = data.iloc[3]

# Verifica se são iguais
print(linha1 == linha2)

Conforme mostrado abaixo, os resultados retornados por ambos os métodos são os mesmos.

Saída:

Name        True
Team        True
Number      True
Position    True
Age         True
Height      True
Weight      True
College     True
Salary      True
Name: 3, dtype: bool

Exemplo #2: Extração de várias linhas com índice

Neste exemplo, várias linhas são extraídas primeiro passando uma lista e depois passando inteiros para extrair linhas entre esse intervalo. Depois disso, os dois valores são comparados.

# Importa o pacote pandas
import pandas as pd

# Criando DataFrame a partir de um arquico csv
data = pd.read_csv("nba.csv")

# recuperar linhas pelo método loc
linha1 = data.loc[[4, 5, 6, 7]]

# recuperar linhas pelo método iloc
linha2 = data.iloc[4:8]

# Verifica se são iguais
print(linha1 == linha2)

Conforme mostrado abaixo, os resultados retornados por ambos os métodos são os mesmos. Todos os valores são True, exceto os valores na coluna da faculdade, pois esses eram valores NaN.

Saída:

   Name  Team  Number  Position   Age  Height  Weight  College  Salary
4  True  True    True      True  True    True    True    False    True
5  True  True    True      True  True    True    True    False    True
6  True  True    True      True  True    True    True     True    True
7  True  True    True      True  True    True    True     True    True

Artigo escrito por Kartikaybhutani e traduzido por Acervolima de Python | Extracting rows using Pandas .iloc[].

Licença

segunda-feira, 19 de abril de 2021

Python - Filtrando dados com o método .query() do pandas

A análise de dados requer muitas operações de filtragem. O pandas fornece muitos métodos para filtrar um DataFrame e Dataframe.query é um deles.

Sintaxe: DataFrame.query(expr, inplace=False, **kwargs)

Parâmetros:

  • expr: Expressão em forma de string para filtrar dados.
  • inplace: Faz alterações no dataframe original se o valor True for passado.
  • kwargs: Outros argumentos de palavra-chave.

Tipo de retorno: Um DataFrame filtrado.

Para baixar o arquivo CSV utilizado, clique aqui.

Observação: o método Dataframe.query() só funciona se o nome da coluna não tiver espaços vazios. Portanto, antes de aplicar o método, os espaços nos nomes das colunas são substituídos por ‘_’.

Exemplo #1: Filtragem de condição única

Neste exemplo, os dados são filtrados com base em uma única condição. Antes de aplicar o método query(), os espaços nos nomes das colunas foram substituídos por ‘_’.

Conforme mostrado na abaixo, os dados agora têm apenas linhas em que Senior Management é True.

Saída:

    First_Name  Gender  Start_Date Last_Login_Time  Salary  Bonus_% Senior_Management             Team
0      Douglas    Male    8/6/1993        12:42 PM   97308    6.945              True        Marketing
1       Thomas    Male   3/31/1996         6:53 AM   61933    4.170              True              NaN
3        Jerry    Male    3/4/2005         1:00 PM  138705    9.340              True          Finance
4        Larry    Male   1/24/1998         4:47 PM  101004    1.389              True  Client Services
6         Ruby  Female   8/17/1987         4:20 PM   65476   10.012              True          Product
..         ...     ...         ...             ...     ...      ...               ...              ...
991       Rose  Female   8/25/2002         5:12 AM  134505   11.051              True        Marketing
992    Anthony    Male  10/16/2011         8:35 AM  112769   11.625              True          Finance
993       Tina  Female   5/15/1997         3:53 PM   56450   19.040              True      Engineering
994     George    Male   6/21/2013         5:47 PM   98874    4.479              True        Marketing
999     Albert    Male   5/15/2012         6:24 PM  129949   10.169              True            Sales

[468 rows x 8 columns]

Exemplo #2: Filtragem de múltiplas condições

Neste exemplo, o dataframe foi filtrado em várias condições. Antes de aplicar o método query(), os espaços nos nomes das colunas foram substituídos por ‘_’.

# importando o pacote pandas
import pandas as pd

# Criando um DataFrame a partir de um arquivo csv
data = pd.read_csv("employees.csv")

# Substituindo os espaços por '_'
data.columns =[column.replace(" ", "_") for column in data.columns]

# Filtrando com o método query
data.query('Senior_Management == True \
            and Gender =="Male" and Team =="Marketing" \
            and First_Name =="Johnny"', inplace = True)

print(data)

Conforme mostrado abaixo, apenas duas linhas foram retornadas com base nos filtros aplicados.

Saída:

    First_Name Gender Start_Date Last_Login_Time  Salary  Bonus_% Senior_Management       Team
413     Johnny   Male  9/14/1992         8:21 AM  115194    5.861              True  Marketing
496     Johnny   Male  2/26/2016         7:39 PM   76394    5.437              True  Marketing

Artigo escrito por Kartikaybhutani e traduzido por Acervolima de Python | Filtering data with Pandas .query() method.

Licença

Python - Utilizando o Series.str.replace() do pandas para substituir texto em uma série

O método Series.str.replace() funciona do mesmo modo como o método .replace() do python, mas também funciona em Series. Antes de chamar .replace() em uma série do pandas, .str deve ser prefixado para diferenciá-lo do método de substituição padrão do Python.

Sintaxe: Series.str.replace(pat, repl, n=-1, case=None, regex=True)

Parâmetros:

  • pat: string ou regex compilado a ser substituído.
  • repl: string ou chamável (função) para substituir em vez de pat.
  • n: Número de substituições a serem feitas em uma única string, o padrão é -1 que significa Tudo.
  • case: Obtém valor booleano para decidir a distinção entre maiúsculas e minúsculas. Passar False para não diferenciar maiúsculas de minúsculas.
  • regex: Valor booleano, se True assume que o padrão passado é um regex

Tipo de retorno: Series com os valores substituídos.

Para baixar o CSV usado no código, clique aqui.

Nos exemplos a seguir, o DataFrame usado contém dados de alguns jogadores da NBA. O DataFrame antes de qualquer operação é anexada abaixo.

              Name            Team  Number Position   Age Height  Weight            College     Salary
0    Avery Bradley  Boston Celtics     0.0       PG  25.0    6-2   180.0              Texas  7730337.0
1      Jae Crowder  Boston Celtics    99.0       SF  25.0    6-6   235.0          Marquette  6796117.0
2     John Holland  Boston Celtics    30.0       SG  27.0    6-5   205.0  Boston University        NaN
3      R.J. Hunter  Boston Celtics    28.0       SG  22.0    6-5   185.0      Georgia State  1148640.0
4    Jonas Jerebko  Boston Celtics     8.0       PF  29.0   6-10   231.0                NaN  5000000.0
..             ...             ...     ...      ...   ...    ...     ...                ...        ...
453   Shelvin Mack       Utah Jazz     8.0       PG  26.0    6-3   203.0             Butler  2433333.0
454      Raul Neto       Utah Jazz    25.0       PG  24.0    6-1   179.0                NaN   900000.0
455   Tibor Pleiss       Utah Jazz    21.0        C  26.0    7-3   256.0                NaN  2900000.0
456    Jeff Withey       Utah Jazz    24.0        C  26.0    7-0   231.0             Kansas   947276.0
457            NaN             NaN     NaN      NaN   NaN    NaN     NaN                NaN        NaN

[458 rows x 9 columns]

Exemplo #1: Substituindo valores na coluna de Age

Neste exemplo, todos os valores na coluna Age com valor 25.0 são substituídos por "Twenty five" usando o método str.replace(). Depois disso, um filtro é criado e passado no método .where() para exibir apenas as linhas que têm Age = “Twenty five”.

# importando o pacote pandas
import pandas as pd

# lendo um arquivo csv diretamente de uma url
data = pd.read_csv("https://media.geeksforgeeks.org/wp-content/uploads/nba.csv")

# Sobrescrevendo a coluna Age com os valores substituído
data["Age"]= data["Age"].replace(25.0, "Twenty five")

# Cria um filtro para a coluna Age
# com valores iguais a "Twenty five"
filter = data["Age"]=="Twenty five"

# imprimindo apenas as colunas filtradas
print(data.where(filter).dropna())

Conforme mostrado na saída abaixo, todos os valores na coluna Age com Age = 25,0 foram substituídos por "Twenty five".

Saída:

                    Name                    Team  Number Position          Age Height  Weight               College      Salary
0          Avery Bradley          Boston Celtics     0.0       PG  Twenty five    6-2   180.0                 Texas   7730337.0
1            Jae Crowder          Boston Celtics    99.0       SF  Twenty five    6-6   235.0             Marquette   6796117.0
7           Kelly Olynyk          Boston Celtics    41.0        C  Twenty five    7-0   238.0               Gonzaga   2165160.0
26       Thomas Robinson           Brooklyn Nets    41.0       PF  Twenty five   6-10   237.0                Kansas    981348.0
35      Cleanthony Early         New York Knicks    11.0       SF  Twenty five    6-8   210.0         Wichita State    845059.0
44      Derrick Williams         New York Knicks    23.0       PF  Twenty five    6-8   240.0               Arizona   4000000.0
47         Isaiah Canaan      Philadelphia 76ers     0.0       PG  Twenty five    6-0   201.0          Murray State    947276.0
48      Robert Covington      Philadelphia 76ers    33.0       SF  Twenty five    6-9   215.0       Tennessee State   1000000.0
59       Hollis Thompson      Philadelphia 76ers    31.0       SG  Twenty five    6-8   206.0            Georgetown    947276.0
71         Terrence Ross         Toronto Raptors    31.0       SF  Twenty five    6-7   195.0            Washington   3553917.0
79             Ian Clark   Golden State Warriors    21.0       SG  Twenty five    6-3   175.0               Belmont    947276.0
105          C.J. Wilcox    Los Angeles Clippers    30.0       SG  Twenty five    6-5   195.0            Washington   1159680.0
113           Ryan Kelly      Los Angeles Lakers     4.0       PF  Twenty five   6-11   230.0                  Duke   1724250.0
126         John Jenkins            Phoenix Suns    23.0       SG  Twenty five    6-4   215.0            Vanderbilt    981348.0
130         Phil Pressey            Phoenix Suns    25.0       PG  Twenty five   5-11   175.0              Missouri     55722.0
136           Quincy Acy        Sacramento Kings    13.0       SF  Twenty five    6-7   240.0                Baylor    981348.0
143     DeMarcus Cousins        Sacramento Kings    15.0        C  Twenty five   6-11   270.0              Kentucky  15851950.0
144           Seth Curry        Sacramento Kings    30.0       SG  Twenty five    6-2   185.0                  Duke    947276.0
151     Cameron Bairstow           Chicago Bulls    41.0       PF  Twenty five    6-9   250.0            New Mexico    845059.0
166  Matthew Dellavedova     Cleveland Cavaliers     8.0       PG  Twenty five    6-4   198.0          Saint Mary's   1147276.0
175         Jordan McRae     Cleveland Cavaliers    12.0       SG  Twenty five    6-5   179.0             Tennessee    111196.0
177        Iman Shumpert     Cleveland Cavaliers     4.0       SG  Twenty five    6-5   220.0          Georgia Tech   8988765.0
179     Tristan Thompson     Cleveland Cavaliers    13.0        C  Twenty five    6-9   238.0                 Texas  14260870.0
184        Lorenzo Brown         Detroit Pistons    17.0       PG  Twenty five    6-5   189.0  North Carolina State    111444.0
185       Reggie Bullock         Detroit Pistons    25.0       SF  Twenty five    6-7   205.0        North Carolina   1252440.0
202         Solomon Hill          Indiana Pacers    44.0       SF  Twenty five    6-7   225.0               Arizona   1358880.0
209   Shayne Whittington          Indiana Pacers    42.0       PF  Twenty five   6-11   250.0      Western Michigan    845059.0
214     Jared Cunningham         Milwaukee Bucks     9.0       SG  Twenty five    6-4   195.0          Oregon State    947276.0
216          John Henson         Milwaukee Bucks    31.0       PF  Twenty five   6-11   229.0        North Carolina   2943221.0
266       JaMychal Green       Memphis Grizzlies     0.0       PF  Twenty five    6-9   227.0               Alabama    845059.0
272     Lance Stephenson       Memphis Grizzlies     1.0       SF  Twenty five    6-5   230.0            Cincinnati   9000000.0
284          James Ennis    New Orleans Pelicans     4.0       SF  Twenty five    6-7   210.0      Long Beach State    845059.0
286          Tim Frazier    New Orleans Pelicans     2.0       PG  Twenty five    6-1   170.0            Penn State    845059.0
289      Jordan Hamilton    New Orleans Pelicans    25.0       SG  Twenty five    6-7   220.0                 Texas   1015421.0
290         Jrue Holiday    New Orleans Pelicans    11.0       PG  Twenty five    6-4   205.0                  UCLA  10595507.0
366       Nikola Vucevic           Orlando Magic     9.0        C  Twenty five    7-0   260.0                   USC  11250000.0
382            John Wall      Washington Wizards     2.0       PG  Twenty five    6-4   195.0              Kentucky  15851950.0
385          Will Barton          Denver Nuggets     5.0       SF  Twenty five    6-6   175.0               Memphis   3533333.0
404        Adreian Payne  Minnesota Timberwolves    33.0       PF  Twenty five   6-10   237.0        Michigan State   1938840.0
428      Al-Farouq Aminu  Portland Trail Blazers     8.0       SF  Twenty five    6-9   215.0           Wake Forest   8042895.0
436       Damian Lillard  Portland Trail Blazers     0.0       PG  Twenty five    6-3   195.0           Weber State   4236287.0

Exemplo #2: insensibilidade a maiúsculas e minúsculas

Neste exemplo, o nome do time Boston Celtics é substituído por New Boston Celtics. Nos parâmetros, em vez de passar Boston, boston é passado (com 'b' em minúsculas) e o caso é definido como False, o que significa que não diferencia maiúsculas de minúsculas. Depois disso, apenas as equipes com nome de equipe New Boston Celtics são exibidas usando o método .where().

# importando o pacote pandas
import pandas as pd

# lendo um arquivo csv diretamente de uma url
data = pd.read_csv("https://media.geeksforgeeks.org/wp-content/uploads/nba.csv")

# Sobrescrevendo a coluna Age com os valores substituído
data["Team"]= data["Team"].str.replace("boston", "New Boston", case = False)

# Cria um filtro para a coluna Team
# com valores iguais a "New Boston Celtics"
filter = data["Team"] == "New Boston Celtics"

# imprimindo apenas as colunas filtradas
print(data.where(filter).dropna())

Conforme mostrado na saída abaixo, Boston é substituído por New Boston, independentemente das minúsculas transmitidas nos parâmetros. Isso ocorre porque o parâmetro case foi definido como False.

Saída:

               Name                Team  Number Position   Age Height  Weight         College     Salary
0     Avery Bradley  New Boston Celtics     0.0       PG  25.0    6-2   180.0           Texas  7730337.0
1       Jae Crowder  New Boston Celtics    99.0       SF  25.0    6-6   235.0       Marquette  6796117.0
3       R.J. Hunter  New Boston Celtics    28.0       SG  22.0    6-5   185.0   Georgia State  1148640.0
6     Jordan Mickey  New Boston Celtics    55.0       PF  21.0    6-8   235.0             LSU  1170960.0
7      Kelly Olynyk  New Boston Celtics    41.0        C  25.0    7-0   238.0         Gonzaga  2165160.0
8      Terry Rozier  New Boston Celtics    12.0       PG  22.0    6-2   190.0      Louisville  1824360.0
9      Marcus Smart  New Boston Celtics    36.0       PG  22.0    6-4   220.0  Oklahoma State  3431040.0
10  Jared Sullinger  New Boston Celtics     7.0        C  24.0    6-9   260.0      Ohio State  2569260.0
11    Isaiah Thomas  New Boston Celtics     4.0       PG  27.0    5-9   185.0      Washington  6912869.0
12      Evan Turner  New Boston Celtics    11.0       SG  27.0    6-7   220.0      Ohio State  3425510.0
13      James Young  New Boston Celtics    13.0       SG  20.0    6-6   215.0        Kentucky  1749840.0
14     Tyler Zeller  New Boston Celtics    44.0        C  26.0    7-0   253.0  North Carolina  2616975.0

Artigo escrito por Kartikaybhutani e traduzido por Acervolima de Python | Pandas Series.str.replace() to replace text in a series.

Licença