segunda-feira, 19 de abril de 2021

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

0 comentários:

Postar um comentário