error using astype when NaN exists in a dataframe

后端 未结 1 1100
伪装坚强ぢ
伪装坚强ぢ 2020-12-13 03:35
df
     A     B  
0   a=10   b=20.10
1   a=20   NaN
2   NaN    b=30.10
3   a=40   b=40.10

I tried :

df[\'A\'] = df[\'A\'].str.extra         


        
相关标签:
1条回答
  • 2020-12-13 04:34

    If some values in column are missing (NaN) and then converted to numeric, always dtype is float. You cannot convert values to int. Only to float, because type of NaN is float.

    print (type(np.nan))
    <class 'float'>
    

    See docs how convert values if at least one NaN:

    integer > cast to float64

    If need int values you need replace NaN to some int, e.g. 0 by fillna and then it works perfectly:

    df['A'] = df['A'].str.extract('(\d+)', expand=False)
    df['B'] = df['B'].str.extract('(\d+)', expand=False)
    print (df)
         A    B
    0   10   20
    1   20  NaN
    2  NaN   30
    3   40   40
    
    df1 = df.fillna(0).astype(int)
    print (df1)
        A   B
    0  10  20
    1  20   0
    2   0  30
    3  40  40
    
    print (df1.dtypes)
    A    int32
    B    int32
    dtype: object
    
    0 讨论(0)
提交回复
热议问题