Python / Pandas - 使用NaN将列中的电话号码从float转换为int

时间:2017-09-09 13:58:09

标签: python pandas

我有一个带有浮点数和NaN的列的数据框。 那些是电话号码,它们看起来像浮子一样奇怪(它最终会得到一个" .0"电话号码看起来像5551981180099.0)。我尝试使用df['phone'].astype(int)来解决这个问题,但是它遇到了NaNs,我得到了一个"无法将NAs转换为int"错误。

所以我用这个去了残酷的力量:

for i in range(len(df.index)):
    if pd.isnull(df['phone'][i]) == False:
        df['phobe'][i] = int(df['phone'][i])

但当我print(type(df['phone'][i]))时,它告诉我它仍然是class 'numpy.float64'

我尝试了将所有内容转换为其他内容以使电话号码看起来不错(转换为字符串并取出最后两个字符,应用astype(str),astype(int)等)但似乎没有任何效果。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您的NaN值为int,则按设计,所有值都会转换为float s。

您可以将NaN替换为某些int,然后将列转换为int

df['phone'] = df['phone'].fillna(0).astype(int)

首先删除NaN行:

df = df.dropna(subset=['phone'])
df['phone'] = df['phone'].astype(int)

或者将所有值替换为str然后删除.0,然后获取字符串NaN(不会丢失值):

df['phone'] = df['phone'].astype(str).str.replace('\.0', '')

最后如果需要删除最后2个字符,请使用indexing with str

df['phone'] = df['phone'].astype(str).str.replace('\.0', '').str[:-2]