30 votes

Comment traiter NULL normal de la chaîne avec les pandas?

J'ai un fichier csv avec une colonne avec des cordes et je veux le lire avec les pandas. Dans ce fichier la chaîne null se produit comme une valeur réelle et ne doit pas être considérée comme une valeur manquante.

Exemple:

import pandas as pd
from io import StringIO

data = u'strings,numbers\nfoo,1\nbar,2\nnull,3'
print(pd.read_csv(StringIO(data)))

Cela donne le résultat suivant:

  strings  numbers
0     foo        1
1     bar        2
2     NaN        3

Que puis-je faire pour obtenir la valeur null tel qu'il est, et pas comme NaN) dans le DataFrame? Le fichier peut être supposé contiennent pas réellement de valeurs manquantes.

35voto

coldspeed Points 111053

Vous pouvez spécifier un converters argument en faveur de l' string colonne.

pd.read_csv(StringIO(data), converters={'strings' : str})

  strings  numbers
0     foo        1
1     bar        2
2    null        3

Cela permettra de by-pass des pandas automatique de l'analyse.


Une autre option est le paramètre na_filter=False:

pd.read_csv(StringIO(data), na_filter=False)

  strings  numbers
0     foo        1
1     bar        2
2    null        3

Cela fonctionne pour l'ensemble du DataFrame, donc à utiliser avec précaution. Je recommande la première option si vous souhaitez chirurgicalement appliquer à sélectionner les colonnes à la place.

15voto

EdChum Points 10205

La raison à cela est que la chaîne 'null' est considérée comme NaN sur l'analyse, vous pouvez désactiver cette fonction en passant keep_default_na=False en plus de @coldspeed de réponse:

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 liste complète est:

na_values : scalaire, str, sous forme de liste, ou dict, Aucun défaut

D'autres chaînes de reconnaître que NA/NaN. Si dict passé, spécifique par colonne NA valeurs. Par défaut, les valeurs suivantes sont interprétées comme NaN: ‘, ‘#N/A, N/A#N/A', ‘#NA', ‘-1.#IND', ‘-1.#QNAN', ‘NaN', ‘nan', ‘1.#IND', ‘1.#QNAN', ‘N/A', ‘NA', ‘NULL', ‘NaN', ‘n/a', ‘nan', ‘null'.

6voto

MaxU Points 5284

on peut dynamiquement exclure 'NULL' et 'null' de l'ensemble de défaut _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'}

et de l'utiliser en read_csv():

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

2voto

Acccumulation Points 1642

D'autres réponses sont mieux pour lire dans un fichier csv sans "null" être interprété en Nan, mais si vous avez un dataframe que vous voulez "fixe", ce code va le faire: df=df.fillna('null')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X