Pandas: ValueError: impossible de convertir le flotteur NaN en entier

- Je obtenir ValueError: impossible de convertir le flotteur NaN entier pour la suite:

df = pandas.read_csv('zoom11.csv')
df[['x']] = df[['x']].astype(int)
  • Le "x" est évidemment une colonne dans le fichier csv, mais je ne peut pas détecter toutes les float NaN dans le fichier, et n'obtiennent pas ce que veut dire par là.
  • Quand j'ai lu la colonne en tant que Chaîne de caractères, puis il a des valeurs comme -1,0,1,...2000, l'air très sympa int nombres pour moi.
  • Quand j'ai lu la colonne en tant que float, alors ce peut être chargé. Puis il montre des valeurs comme -1.0,0.0, etc, il n'y a toujours pas de n'importe quel NaN-s
  • J'ai essayé avec error_bad_lines = False et dtype paramètre dans read_csv en vain. Il a juste annule le chargement avec la même exception.
  • Le fichier n'est pas petit (10+ M lignes), donc ne peut pas inspecter manuellement, quand j'ai extrait une petite partie en-tête, puis il n'y a pas d'erreur, mais il arrive avec plein de fichier. C'est donc quelque chose dans le fichier, mais ne peut pas détecter quoi.
  • Logiquement le csv ne devrait pas avoir de valeurs manquantes, mais même si il y a des ordures alors je serais ok pour ignorer les lignes. Ou au moins de les identifier, mais je ne vois pas de moyen de parcourir les fichiers et la conversion de rapport d'erreurs.

Mise à jour: en Utilisant les conseils dans les commentaires/réponses que j'ai obtenu mes données nettoyer avec ceci:

# x contained NaN
df = df[~df['x'].isnull()]

# Y contained some other garbage, so null check was not enough
df = df[df['y'].str.isnumeric()]

# final conversion now worked
df[['x']] = df[['x']].astype(int)
df[['y']] = df[['y']].astype(int)
  • Essayez de le vérifier par df[df['x'].isnull()]
  • Vous avez besoin de comprendre ce que vous voulez faire avec tout NaNs, et puis le faire.
  • merci @jezrael , maintenant df[df['x'].isnull()] n'a identifier une ligne avec "NaN" et j'ai pu l'enlever ! Maintenant, avec un autre domaine similaire - ce qui semble avoir quelques autres ordures qui n'est pas de type int. Est-il générique façon de trouver des lignes qui ne sont pas convertible de donnée de type de données, afin que je puisse les identifier et les ordures de tous?
  • Utilisation pd.to_numeric avec errors = coerce au lieu de astype int alors fillna avec tout ce que vous voulez.
  • Dans v0.24, les pandas introduit Nullable Types d'Entiers qui soutiennent les colonnes de type Entier avec NaNs. Voir cette réponse pour plus d'informations.
InformationsquelleAutor JaakL | 2017-11-16