Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre tipagem dos dados

Acabei de importar uma base do repositório UCI ML e não estou conseguindo rodar um algoritmo de KNN por causa da tipagem de uma variáveis específica.

Assim que executei o dtypes apareceu o seguinte:

tipo = pd.DataFrame(df.dtypes, columns = ['Tipo'])
tipo.columns.name = 'Variáveis'
print(tipo)


Variáveis               Tipo
sample_code            int64
clump_thick            int64
cell_sive              int64
cell_shape             int64
marg_adhesion          int64
sing_epith_cell_size   int64
bare_nuclei          object
bland_chromatin        int64
normal_nucleoli        int64
mitoses                int64
class                  int64

O que aconteceu? Como eu faço para converter a variável bare_nuclei? (sou iniciante)

Segue o código completo:

import pandas as pd
import os

#Reading data
labels = ['sample_code'    ,'clump_thick'         ,'cell_sive'  ,'cell_shape'     ,
              'marg_adhesion'  ,'sing_epith_cell_size','bare_nuclei','bland_chromatin',
              'normal_nucleoli','mitoses'             ,'class']

df = pd.read_csv('.../Breast cancer Wisconsin/data.csv', 
                 sep=',', header=0, names=labels)

tipo = pd.DataFrame(df.dtypes, columns = ['Tipo'])
tipo.columns.name = 'Variáveis'
print(tipo)
1 resposta
solução!

Olá Fabio,

Analisando os dados que você está utilizando percebi que a variável "bare_nuclei" apresenta 16 registros com o caractere "?".

In [1]:

df['bare_nuclei'].value_counts()

Out [1]:

1     401
10    132
5      30
2      30
3      28
8      21
4      19
?      16  <- Registros problemáticos
9       9
7       8
6       4
Name: bare_nuclei, dtype: int64

Você como cientista de dados pode tentar investigar o porquê da falta desta informação e talvez tentar imputar estes dados, como aprendemos nas aulas sobre Valores Faltantes.

Vou mostrar como eliminar estas informações do DataFrame e como converter uma coluna de object (string) para inteiro.

In [2]:

df = df[df['bare_nuclei'] != '?']
df['bare_nuclei'] = df['bare_nuclei'].astype('int64')
df.dtypes

Out [2]:

sample_code             int64
clump_thick             int64
cell_sive               int64
cell_shape              int64
marg_adhesion           int64
sing_epith_cell_size    int64
bare_nuclei             int64
bland_chromatin         int64
normal_nucleoli         int64
mitoses                 int64
class                   int64
dtype: object

Espero ter ajudado meu amigo.

Abraço.

Rodrigo