remove exclude eliminar dropnull dropna delete python pandas csv dataframe null

python - exclude - ¿Cómo tratar a NULL como una cadena normal con pandas?



python dropna subset (4)

La razón por la que esto sucede es que la cadena ''null'' se trata como NaN en el análisis, puede desactivarlo pasando keep_default_na=False además de la respuesta de @ coldspeed:

In[49]: data = u''strings,numbers/nfoo,1/nbar,2/nnull,3'' df = pd.read_csv(io.StringIO(data), keep_default_na=False) df Out[49]: strings numbers 0 foo 1 1 bar 2 2 null 3

La lista completa es:

na_values: escalar, str, similar a una lista o dict, valor predeterminado Ninguno

Cadenas adicionales para reconocer como NA / NaN. Si se pasa dict, valores específicos de NA por columna. Por defecto, los siguientes valores se interpretan como NaN: '''', ''# N / A'', ''# N / AN / A'', ''#NA'', ''-1. # IND'', ''-1. # QNAN'', ''-NaN'', ''-nan'', ''1. # IND'', ''1. # QNAN'', ''N / A'', ''NA'', ''NULL'', ''NaN'', ''n / a'', ''nan '', ''nulo''.

Tengo un archivo csv con una columna con cadenas y quiero leerlo con pandas. En este archivo, la cadena null aparece como un valor real y no debe considerarse como un valor perdido.

Ejemplo:

import pandas as pd from io import StringIO data = u''strings,numbers/nfoo,1/nbar,2/nnull,3'' print(pd.read_csv(StringIO(data)))

Esto da el siguiente resultado:

strings numbers 0 foo 1 1 bar 2 2 NaN 3

¿Qué puedo hacer para obtener el valor null tal como es (y no como NaN) en el marco de datos? Se puede asumir que el archivo no contiene ningún valor realmente faltante.


Otras respuestas son mejores para leer en un csv sin que "null" se interprete como Nan , pero si tiene un marco de datos que quiere "arreglar", este código lo hará: df=df.fillna(''null'')


Puede especificar un argumento de converters para la columna de string .

pd.read_csv(StringIO(data), converters={''strings'' : str}) strings numbers 0 foo 1 1 bar 2 2 null 3

Esto evitará el análisis automático de los pandas.

Otra opción es configurar na_filter=False :

pd.read_csv(StringIO(data), na_filter=False) strings numbers 0 foo 1 1 bar 2 2 null 3

Esto funciona para todo el DataFrame, así que use con precaución. Recomiendo la primera opción si desea aplicar esto quirúrgicamente para seleccionar columnas en su lugar.


podemos excluir dinámicamente ''NULL'' y ''null'' del conjunto de _NA_VALUES predeterminados _NA_VALUES :

In [4]: na_vals = pd.io.common._NA_VALUES.difference({''NULL'',''null''}) In [5]: na_vals Out[5]: {'''', ''#N/A'', ''#N/A N/A'', ''#NA'', ''-1.#IND'', ''-1.#QNAN'', ''-NaN'', ''-nan'', ''1.#IND'', ''1.#QNAN'', ''N/A'', ''NA'', ''NaN'', ''n/a'', ''nan''}

y usarlo en read_csv() :

df = pd.read_csv(io.StringIO(data), na_values=na_vals)