python pandas dataframe

python - ¿Cómo puedo reemplazar todos los valores de NaN con cero en una columna de un marco de datos de pandas?



fillna pandas (8)

Creo que DataFrame.fillna() hará esto por ti.

Enlace a Docs para un marco de datos y para una serie .

Ejemplo:

In [7]: df Out[7]: 0 1 0 NaN NaN 1 -0.494375 0.570994 2 NaN NaN 3 1.876360 -0.229738 4 NaN NaN In [8]: df.fillna(0) Out[8]: 0 1 0 0.000000 0.000000 1 -0.494375 0.570994 2 0.000000 0.000000 3 1.876360 -0.229738 4 0.000000 0.000000

Para completar los NaN en una sola columna, seleccione solo esa columna. en este caso, estoy usando inplace = True para cambiar realmente el contenido de df.

In [12]: df[1].fillna(0, inplace=True) Out[12]: 0 0.000000 1 0.570994 2 0.000000 3 -0.229738 4 0.000000 Name: 1 In [13]: df Out[13]: 0 1 0 NaN 0.000000 1 -0.494375 0.570994 2 NaN 0.000000 3 1.876360 -0.229738 4 NaN 0.000000

Tengo un marco de datos como abajo

itm Date Amount 67 420 2012-09-30 00:00:00 65211 68 421 2012-09-09 00:00:00 29424 69 421 2012-09-16 00:00:00 29877 70 421 2012-09-23 00:00:00 30990 71 421 2012-09-30 00:00:00 61303 72 485 2012-09-09 00:00:00 71781 73 485 2012-09-16 00:00:00 NaN 74 485 2012-09-23 00:00:00 11072 75 485 2012-09-30 00:00:00 113702 76 489 2012-09-09 00:00:00 64731 77 489 2012-09-16 00:00:00 NaN

cuando intento aplicar una función a la columna Cantidad, aparece el siguiente error.

ValueError: cannot convert float NaN to integer

He intentado aplicar una función utilizando .isnan del módulo matemático. He probado el atributo pandre .replace. Probé el atributo .sparse data de pandas 0.9 También probé si NaN == declaración de NaN en una función. También he mirado este artículo ¿Cómo reemplazo los valores de NA por ceros en un marco de datos R? Mientras miro algunos otros artículos. Todos los métodos que he intentado no han funcionado o no reconocen NaN. Cualquier consejo o solución sería apreciado.


El siguiente código funcionó para mí.

import pandas df = pandas.read_csv(''somefile.txt'') df = df.fillna(0)


No se garantiza que la división devuelva una vista o una copia. Tu puedes hacer

df[''column''] = df[''column''].fillna(value)


Podría usar replace para cambiar NaN a 0 :

import pandas as pd import numpy as np # for column df[''column''] = df[''column''].replace(np.nan, 0) # for whole dataframe df = df.replace(np.nan, 0) # inplace df.replace(np.nan, 0, inplace=True)


Solo quería proporcionar un poco de actualización / caso especial ya que parece que la gente todavía viene aquí. Si está utilizando un índice múltiple o, de lo contrario, utiliza un segmentador de datos, la opción inplace = True puede no ser suficiente para actualizar la división que ha elegido. Por ejemplo, en un índice múltiple de 2x2, esto no cambiará ningún valor (a partir de los pandas 0.15):

idx = pd.IndexSlice df.loc[idx[:,mask_1],idx[mask_2,:]].fillna(value=0,inplace=True)

El "problema" es que el encadenamiento rompe la capacidad de relleno para actualizar el marco de datos original. Pongo el "problema" entre comillas porque hay buenas razones para las decisiones de diseño que llevaron a no interpretar a través de estas cadenas en ciertas situaciones. Además, este es un ejemplo complejo (aunque realmente lo encontré), pero lo mismo puede aplicarse a menos niveles de índices dependiendo de cómo se corte.

La solución es DataFrame.update:

df.update(df.loc[idx[:,mask_1],idx[[mask_2],:]].fillna(value=0))

Es una línea, se lee razonablemente bien (más o menos) y elimina cualquier interferencia innecesaria con variables intermedias o bucles, ¡mientras que le permite aplicar fillna a cualquier sector de niveles múltiples que desee!

Si alguien puede encontrar lugares en los que esto no funciona, por favor publique en los comentarios, he estado jugando con él y mirando la fuente y parece que al menos soluciono mis problemas de división de índice múltiple.


Usted debe utilizar fillna () . Esto funciona para mi.

df = df.fillna(value_to_replace_null)


fillna () es la mejor manera de hacerlo. Código -

#fill all Nan value with zero df = df.fillna(0)

También puede usar in situ si no desea usar '' df = df.fillna (value) '' . Código -

df.fillna(0, inplace=True)


Una forma fácil de llenar los valores que faltan: -

columnas de cadena de relleno : cuando las columnas de cadena tienen valores perdidos y valores NaN.

df[''string column name''].fillna(df[''string column name''].mode().values[0], inplace = True)

Rellenar columnas numéricas: cuando las columnas numéricas tienen valores perdidos y valores NaN.

df[''numeric column name''].fillna(df[''numeric column name''].mean(), inplace = True)

llenando NaN con cero:

df[''column name''].fillna(0, inplace = True)