Pandas convert string to int

后端 未结 1 674
南旧
南旧 2020-12-01 10:04

I have a large dataframe with ID numbers:

ID.head()
Out[64]: 
0    4806105017087
1    4806105017087
2    4806105017087
3    4901295030089
4    4901295030089
         


        
相关标签:
1条回答
  • 2020-12-01 10:57

    You need add parameter errors='coerce' to function to_numeric:

    ID = pd.to_numeric(ID, errors='coerce')
    

    If ID is column:

    df.ID = pd.to_numeric(df.ID, errors='coerce')
    

    but non numeric are converted to NaN, so all values are float.

    For int need convert NaN to some value e.g. 0 and then cast to int:

    df.ID = pd.to_numeric(df.ID, errors='coerce').fillna(0).astype(np.int64)
    

    Sample:

    df = pd.DataFrame({'ID':['4806105017087','4806105017087','CN414149']})
    print (df)
                  ID
    0  4806105017087
    1  4806105017087
    2       CN414149
    
    print (pd.to_numeric(df.ID, errors='coerce'))
    0    4.806105e+12
    1    4.806105e+12
    2             NaN
    Name: ID, dtype: float64
    
    df.ID = pd.to_numeric(df.ID, errors='coerce').fillna(0).astype(np.int64)
    print (df)
                  ID
    0  4806105017087
    1  4806105017087
    2              0
    

    EDIT: If use pandas 0.25+ then is possible use integer_na:

    df.ID = pd.to_numeric(df.ID, errors='coerce').astype('Int64')
    print (df)
                  ID
    0  4806105017087
    1  4806105017087
    2            NaN
    
    0 讨论(0)
提交回复
热议问题