terça-feira, 20 de abril de 2021

Python - Trabalhando com data e hora usando pandas

Ao trabalhar com dados, encontrar dados de séries temporais é muito comum. O pandas é uma ferramenta muito útil para trabalhar com dados de séries temporais.

O pandas fornece um conjunto diferente de ferramentas com as quais podemos realizar todas as tarefas necessárias com dados de data e hora. Vamos tentar entender com os exemplos discutidos abaixo.

Código #1: crie um dataframe de datas

import pandas as pd

# Cria um DatetimeIndex com 10 linhas
# 3 cada linha tem um incremento de uma hora
# com relação a linha anterior 
data = pd.date_range('1/1/2011', periods=10, freq='H')

print(data)

Saída:

DatetimeIndex(['2011-01-01 00:00:00', '2011-01-01 01:00:00', 
               '2011-01-01 02:00:00', '2011-01-01 03:00:00', 
               '2011-01-01 04:00:00', '2011-01-01 05:00:00', 
               '2011-01-01 06:00:00', '2011-01-01 07:00:00', 
               '2011-01-01 08:00:00', '2011-01-01 09:00:00'],
              dtype='datetime64[ns]', freq='H')

Código #2: Cria um intervalo de datas e mostra os recursos básicos

import pandas as pd

# Obtem a data atual
x = pd.Timestamp.now()

# mostra o mês e o ano atual
print(x.month, x.year)

Saída:

4 2021

Os recursos de data e hora podem ser divididos em duas categorias. A primeira, momentos de um período, e a segunda, o tempo decorrido desde um determinado período. Esses recursos podem ser muito úteis para entender os padrões nos dados.

Divida uma determinada data em recursos:

  • pandas.Series.dt.year retorna o ano da data e hora.
  • pandas.Series.dt.month retorna o mês da data e hora.
  • pandas.Series.dt.day retorna o dia da hora e data.
  • pandas.Series.dt.hour retorna a hora da data e hora.
  • pandas.Series.dt.minute retorna o minuto da data e hora.

Consulte todas as propriedades de data e hora a partir daqui.

Código #3: divida os dados e o tempo em recursos separados

import pandas as pd

# Cria um DataFrame com 72 linhas
# (72 períodos)
rng = pd.DataFrame()
rng['date'] = pd.date_range('1/1/2011', periods=72, freq='H')

# Imprime os cinco primeiros elementos no formato dd-mm-yy 00:00:00
print(rng[:5])

# Crie colunas para ano, mês, dia, hora e minuto
rng['year'] = rng['date'].dt.year
rng['month'] = rng['date'].dt.month
rng['day'] = rng['date'].dt.day
rng['hour'] = rng['date'].dt.hour
rng['minute'] = rng['date'].dt.minute

# mostra as primeiras 3 linhas do DataFrame
print(rng.head(3))

Saída:

                 date
0 2011-01-01 00:00:00
1 2011-01-01 01:00:00
2 2011-01-01 02:00:00
3 2011-01-01 03:00:00
4 2011-01-01 04:00:00
                 date  year  month  day  hour  minute
0 2011-01-01 00:00:00  2011      1    1     0       0
1 2011-01-01 01:00:00  2011      1    1     1       0
2 2011-01-01 02:00:00  2011      1    1     2       0

Código #4: para obter a hora atual, use pandas.Timestamp.now() e, a seguir, converta a data e hora em data e hora e acesse diretamente o ano, mês ou dia.

import pandas as pd

# Input present datetime using Timestamp
t = pd.Timestamp.now()

print(t)

Saída:

2021-04-20 16:28:22.972406

Vamos analisar este problema em um conjunto de dados real uforeports.

import pandas as pd

# Lê um arquivo csv a partir de uma url
df = pd.read_csv('http://bit.ly/uforeports')

print(df.head())

Saída:

                   City Colors Reported Shape Reported State             Time
0                Ithaca             NaN       TRIANGLE    NY   6/1/1930 22:00
1           Willingboro             NaN          OTHER    NJ  6/30/1930 20:00
2               Holyoke             NaN           OVAL    CO  2/15/1931 14:00
3               Abilene             NaN           DISK    KS   6/1/1931 13:00
4  New York Worlds Fair             NaN          LIGHT    NY  4/18/1933 19:00
# converte a coluna Time para o formato datatime
df['Time'] = pd.to_datetime(df.Time)

print(df.head())

Saída:

                   City Colors Reported Shape Reported State                Time
0                Ithaca             NaN       TRIANGLE    NY 1930-06-01 22:00:00
1           Willingboro             NaN          OTHER    NJ 1930-06-30 20:00:00
2               Holyoke             NaN           OVAL    CO 1931-02-15 14:00:00
3               Abilene             NaN           DISK    KS 1931-06-01 13:00:00
4  New York Worlds Fair             NaN          LIGHT    NY 1933-04-18 19:00:00
# Lê um arquivo csv a partir de uma url
df = pd.read_csv('http://bit.ly/uforeports')

# converte a coluna Time para o formato datatime
df['Time'] = pd.to_datetime(df.Time)

# Mostra apenas as horas de cada elemento datetime
print(df.Time.dt.hour.head())

Saída:

0    22
1    20
2    14
3    13
4    19
Name: Time, dtype: int64

Artigo escrito por aakarsha_chugh e traduzido por Acervolima de Python | Working with date and time using Pandas.

Licença

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