Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

colunas aparecem no DataFrame, mas da erro na seleção

Busquei no Kaggle, um arquivo CSV para aplicar o que aprendi em aula, mas estou com um problema com algumas colunas: estou removendo o '$' dos valores para conseguir usa-los, então apliquei o seguinte código:

colunas_para_verificar = ['sales', 'profit', 'assets', 'market value']
print(empresas_brasileiras.loc[:, colunas_para_verificar])
empresas_brasileiras.loc[:, colunas_para_verificar] = empresas_brasileiras.loc[:, colunas_para_verificar].replace({'$': ''}, regex= True)
empresas_brasileiras

Mas me retorna um erro:

KeyError: "['sales', 'profit'] not in index"

Mas as colunas estão lá! Escritas da mesma forma, tanto no código quanto no DataFrame contido na variável empresas_brasileiras. Gostaria de saber como verificar o ocorrido com as colunas, que vejo mas não consigo seleciona-las? (estou pelo Jupyter)

2 respostas
solução!

Olá Rodrigo, tudo bem ? Espero que sim.

Esse problema apareceu porque o DataFrame tem um espaço no nome das colunas sales, profit e rank, você pode verificar isso acessando o atributo columns .

Código:

empresas_brasileiras.columns

Resultado:

Index(['rank ', 'global company', 'country', 'sales ', 'profit ', 'assets',
       'market value'],
      dtype='object')

Para resolver isso podemos utilizar o método strip que remove espaços de strings e sobrescrever o nome das colunas. Para isso vamos acessar o columns, depois o str para acessar o nome de cada coluna e por ultimo o método strip(), vamos atribuir esses novos nomes para o mesmo atributo empresas_brasileiras.columns

Código:

empresas_brasileiras.columns = empresas_brasileiras.columns.str.strip()

Agora podemos acessar o atributo e verificar que os espaços sumiram.

Código:

empresas_brasileiras.columns

Resultado:

Index(['rank', 'global company', 'country', 'sales', 'profit', 'assets',
       'market value'],
      dtype='object')

E agora seu código vai funcionar.

Código:

colunas_para_verificar = ['sales', 'profit', 'assets', 'market value']
# print(empresas_brasileiras.loc[:, colunas_para_verificar])
empresas_brasileiras.loc[:, colunas_para_verificar] = empresas_brasileiras.loc[:, colunas_para_verificar].replace({'$': ''}, regex= True)
empresas_brasileiras

Resultado:

rankglobal companycountrysalesprofitassetsmarket value
6465PetrobrasBrazil$83.89 B$19.77 B$174.68 B$83.98 B
116117ValeBrazil$54.4 B$22.47 B$89.61 B$82.03 B
136137Itaú Unibanco HoldingBrazil$35.96 B$4.96 B$372.3 B$52.89 B
180181Banco BradescoBrazil$28.33 B$4.07 B$296.89 B$43.16 B
266267Banco do BrasilBrazil$29.54 B$3.4 B$362.53 B$20.7 B
398399JBSBrazil$64.99 B$3.8 B$37.18 B$17.48 B
773774Banco Btg PactualBrazil$2.71 B$848.1 M$68.31 B$56.14 B
952953BraskemBrazil$19.57 B$2.59 B$16.62 B$6.76 B
961962Gerdau (Cosigua)Brazil$14.52 B$2.87 B$13.25 B$10.16 B
991992Suzano Papel e CeluloseBrazil$7.59 B$1.6 B$21.36 B$14.66 B
10021002EletrobrásBrazil$6.97 B$1.05 B$33.42 B$13.42 B
11401141ItaúsaBrazil$1.51 B$2.26 B$15.44 B$18.42 B
12571257RaizenBrazil$30.14 B$619 M$18.86 B$1.36 B
13231324CSNBrazil$8.88 B$2.27 B$14.25 B$6.22 B
14561456XPBrazil$2.31 B$665.9 M$25.02 B$14.29 B
14691470Metalurgica GerdauBrazil$14.52 B$904.1 M$13.39 B$2.6 B
14941495Marfrig Global FoodsBrazil$15.82 B$804.6 M$8.62 B$2.62 B
15381539B3Brazil$1.71 B$874.2 M$9.63 B$18.37 B
15441545WEGBrazil$4.37 B$664.5 M$4.3 B$27.68 B
16531652UsiminasBrazil$6.47 B$1.75 B$8.23 B$3.1 B
18081807Ultrapar ParticipacoesBrazil$20.34 B$157.6 M$6.99 B$3.26 B
18521853CPFL EnergiaBrazil$7.27 B$879.9 M$11.87 B$8.47 B
19421943BradesparBrazil$0 M$1.5 B$1.36 B$2.43 B

Um ponto é que o replace vai apenas substituir quando ele encontrar apenas o $ sozinho.

Uma sugestão que eu deixo é utilizar o replace do Series.str

empresas_brasileiras['sales'].str.replace('$','',regex=False)

Espero ter ajudado e qualquer duvida não hesite em perguntar.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Igor, sua resposta foi fantástica! muito obrigado!