terça-feira, 20 de abril de 2021

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

2 comentários:

  1. Muito obrigado por compartilhar. Estava com esse problema agora e me ajudou muito. Obrigado!

    ResponderExcluir
  2. Muito obrigado por compartilhar. Estava com essa duvida e me ajudou muito.

    ResponderExcluir