Cómo solucionarlo: ValueError: no se puede convertir NaN flotante en entero

En este artículo, discutiremos cómo corregir el error de valor: no se puede convertir NaN flotante en entero en Python.

En Python, NaN significa No es un número. Este error ocurrirá cuando estamos convirtiendo la columna del marco de datos del tipo flotante que contiene valores NaN a un número entero.

Veamos el error y exploremos los métodos para solucionarlo.

Conjunto de datos en uso:

Verifiquemos el error al convertir de tipo flotante (columna de marcas) a tipo entero. Podemos convertir usando la función astype()

Ejemplo: representación del error

Python3

# import pandas
import pandas
 
# import numpy
import numpy
 
# create a dataframe
dataframe = pandas.DataFrame({'name': ['sireesha', 'gnanesh',
                                       'sridevi', 'vijay', 'sreemukhi'],
                              'marks': [90.3, numpy.nan, 67.8, 89, numpy.nan]})
 
# convert to integer type
dataframe['marks'].astype(int)

Producción:

ValueError: no se pueden convertir valores no finitos (NA o inf) a enteros

Debido a que los valores de NaN no son posibles de convertir el marco de datos. Entonces, para solucionar este problema, debemos eliminar los valores de NaN

Método 1: Soltar filas con valores NaN

Aquí vamos a eliminar los valores de NaN de la columna del marco de datos usando la función dropna() . Esta función eliminará las filas que contienen valores NaN.

Sintaxis :

dataframe.dropna()

Ejemplo: Tratar con el error 

Python3

# import pandas
import pandas
 
# import numpy
import numpy
 
# create a dataframe
dataframe = pandas.DataFrame({'name': ['sireesha', 'gnanesh',
                                       'sridevi', 'vijay',
                                       'sreemukhi'],
                              'marks': [90.3, numpy.nan, 67.8, 89, numpy.nan]})
# display data type
print(dataframe['marks'] .dtype)
 
 
# drop the NaN values
dataframe = dataframe.dropna()
 
# display
print(dataframe)
 
# convert to integer type for marks column
dataframe['marks'] = dataframe['marks'].astype(int)
 
# display data type
dataframe['marks'] .dtype

Producción:

Método 2: reemplazar los valores de NaN con 0

Podemos reemplazar los valores de NaN con 0 para deshacernos de los valores de NaN. Esto se hace usando la función fillna() . Esta función verificará los valores de NaN en las columnas del marco de datos y completará el valor dado.

Sintaxis :

dataframe.fillna(0)

Ejemplo: Tratar con el error

Python3

# import pandas
import pandas
 
# import numpy
import numpy
 
# create a dataframe
dataframe = pandas.DataFrame({'name': ['sireesha', 'gnanesh',
                                       'sridevi', 'vijay',
                                       'sreemukhi'],
                              'marks': [90.3, numpy.nan, 67.8, 89, numpy.nan]})
# display data type
print(dataframe['marks'] .dtype)
 
# replace NaN values with 0
dataframe = dataframe.fillna(0)
 
# display
print(dataframe)
 
# convert to integer type for marks column
dataframe['marks'] = dataframe['marks'].astype(int)
 
# display data type
dataframe['marks'] .dtype

Producción:

Método 3: Usar numpy.nan_to_num()

Aquí estamos usando NumPy para convertir valores NaN a 0 números.

Sintaxis :

numpy.nan_to_num(numpy.nal)

Ejemplo: Tratar con el error

Python3

# import modules
import numpy
 
# create an nan value
data = numpy.nan
 
# display
print(data)
 
# convert man to value
final = numpy.nan_to_num(data)
 
# display
final

Producción:

nan
0.0

Método 4: usar anulable 

Podemos crear un valor nan como NaN, esto no crea ningún error al convertir flotante a entero.

Sintaxis :

numpy.NaN

Ejemplo: Tratar con el error

Python3

# import pandas
import pandas
 
# import numpy
import numpy
 
# create a dataframe
dataframe = pandas.DataFrame({'name': ['sireesha', 'gnanesh',
                                       'sridevi', 'vijay',
                                       'sreemukhi'],
                              'marks': [90.3, numpy.NaN, 67.8, 89, numpy.NaN]})
# display data type
print(dataframe['marks'] .dtype)
 
# replace NaN values with 0
dataframe = dataframe.fillna(0)
 
# display
print(dataframe)
 
# convert to integer type for marks column
dataframe['marks'] = dataframe['marks'].astype(int)
 
# display data type
dataframe['marks'] .dtype

Producción:

float64
        name  marks
0   sireesha   90.3
1    gnanesh    0.0
2    sridevi   67.8
3      vijay   89.0
4  sreemukhi    0.0
dtype('int64')

Publicación traducida automáticamente

Artículo escrito por sireeshakanneganti112 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *