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)