Como corrigir: valueerror: não é possível converter float nan em int


Um erro que você pode encontrar ao usar pandas é:

 ValueError : cannot convert float NaN to integer

Este erro ocorre quando você tenta converter uma coluna em um DataFrame do pandas de um float para um número inteiro, quando a coluna contém valores NaN.

O exemplo a seguir mostra como corrigir esse erro na prática.

Como reproduzir o erro

Suponha que criemos o seguinte DataFrame do pandas:

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' points ': [25, 12, 15, 14, 19, 23, 25, 29],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4],
                   ' rebounds ': [11, np. no , 10, 6, 5, np. no , 9, 12]})

#view DataFrame
df

        points assists rebounds
0 25 5 11
1 12 7 NaN
2 15 7 10
3 14 9 6
4 19 12 5
5 23 9 NaN
6 25 9 9
7 29 4 12

Atualmente, a coluna “rejeições” é do tipo de dados “float”.

 #print data type of 'rebounds' column
df[' rebounds ']. dtype

dtype('float64')

Suponha que estejamos tentando converter a coluna “bounces” de um float para um inteiro:

 #attempt to convert 'rebounds' column from float to integer
df[' rebounds '] = df[' rebounds ']. astype (int)

ValueError : cannot convert float NaN to integer 

Recebemos um ValueError porque os valores NaN na coluna “rejeições” não podem ser convertidos em valores inteiros.

Como corrigir o erro

A maneira de corrigir esse erro é manipular os valores NaN antes de tentar converter a coluna de flutuante em inteiro.

Podemos usar o código a seguir para identificar primeiro as linhas que contêm valores NaN:

 #print rows in DataFrame that contain NaN in 'rebounds' column
print (df[df[' rebounds ']. isnull ()])

   points assists rebounds
1 12 7 NaN
5 23 9 NaN

Podemos então remover as linhas com valores NaN ou substituir os valores NaN por outro valor antes de converter a coluna de flutuante em inteiro:

Método 1: remover linhas com valores NaN

 #drop all rows with NaN values
df = df. dropna ()

#convert 'rebounds' column from float to integer
df[' rebounds '] = df[' rebounds ']. astype (int) 

#view updated DataFrame
df
	points assists rebounds
0 25 5 11
2 15 7 10
3 14 9 6
4 19 12 5
6 25 9 9
7 29 4 12

#view class of 'rebounds' column
df[' rebounds ']. dtype

dtype('int64')

Método 2: substituir valores NaN

 #replace all NaN values with zeros
df[' rebounds '] = df[' rebounds ']. fillna ( 0 )

#convert 'rebounds' column from float to integer
df[' rebounds '] = df[' rebounds ']. astype (int) 

#view updated DataFrame
df

	points assists rebounds
0 25 5 11
1 12 7 0
2 15 7 10
3 14 9 6
4 19 12 5
5 23 9 0
6 25 9 9
7 29 4 12

#view class of 'rebounds' column
df[' rebounds ']. dtype

dtype('int64')

Observe que ambos os métodos nos permitem evitar o ValueError e converter com êxito a coluna flutuante em uma coluna inteira.

Recursos adicionais

Os tutoriais a seguir explicam como corrigir outros erros comuns em Python:

Como corrigir: as colunas se sobrepõem, mas nenhum sufixo é especificado
Como corrigir: o objeto ‘numpy.ndarray’ não possui um atributo ‘append’
Como corrigir: se você usar todos os valores escalares, precisará passar um índice

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *