web-dev-qa-db-fra.com

pandas littéral invalide pour long () avec erreur base 10

J'essaie de faire: df['Num_Detections'] = df['Num_Detections'].astype(int)

Et j'obtiens l'erreur suivante:

ValueError: littéral non valide pour long () avec la base 10: '12 .0 '

Mes données semblent être les suivantes:

>>> df['Num_Detections'].head()
Out[6]: 
sku_name
DOBRIY MORS GRAPE-CRANBERRY-RASBERRY 1L     12.0
AQUAMINERALE 5.0L                            9.0
DOBRIY PINEAPPLE 1.5L                        2.0
FRUKT.SAD Apple 0.95L                      154.0
DOBRIY Peach-Apple 0.33L                    71.0
Name: Num_Detections, dtype: object

Une idée de comment faire la conversion correctement?

Merci pour l'aide.

7
Night Walker

Il existe une valeur qui ne peut pas être convertie en int.

Vous pouvez utiliser to_numeric et obtenez NaN où est la valeur problématique:

df['Num_Detections'] = pd.to_numeric(df['Num_Detections'], errors='coerce')

Si vous avez besoin de vérifier les lignes avec des valeurs problématiques, utilisez boolean indexing avec masque avec isnull :

print (df[ pd.to_numeric(df['Num_Detections'], errors='coerce').isnull()])

Échantillon:

df = pd.DataFrame({'Num_Detections':[1,2,'a1']})

print (df)
  Num_Detections
0              1
1              2
2             a1

print (df[ pd.to_numeric(df['Num_Detections'], errors='coerce').isnull()])
  Num_Detections
2             a1

df['Num_Detections'] = pd.to_numeric(df['Num_Detections'], errors='coerce')
print (df)
   Num_Detections
0             1.0
1             2.0
2             NaN
21
jezrael