Night Walker Night Walker - 3 months ago 157
Python Question

pandas invalid literal for long() with base 10 error

I am trying to do:

df['Num_Detections'] = df['Num_Detections'].astype(int)


And i get following error:


ValueError: invalid literal for long() with base 10: '12.0'


My data looks looks following:

>>> 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


Any idea how to do the conversion correctly ?

Thanks for help.

Answer

There is some value, which cannot be converted to int.

You can use to_numeric and get NaN where is problematic value:

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

If need check rows with problematic values, use boolean indexing with mask with isnull:

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

Sample:

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