关于nan转int类型报错的问题

今天在对一堆新数据进行数据清洗的时候,遇到了一个这样的问题:

ValueError: cannot convert float NaN to integer 

简单描述一下问题,其实就是NaN在python3中无法被强转。

首先说一下,NaN类型在python2中在强转int的时候默认是转换为0的,而在python25之后的版本再进行转换的时候就会报以上的错误。

我们先打印看一下np.nan的类型:

print(type(np.nan))


<type 'float'>

解决方法:

def to_int(data):
    if data.isnull():  # nan是float类型,在python3.中无法强制转化为int
        return np.nan
    else:
        return int(data)

提供一个更完整的方法:

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

你可能感兴趣的:(Python阅读随记)