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