Python 为什么在运行series.replace时np.nan将我的列强制转换为float

Python 为什么在运行series.replace时np.nan将我的列强制转换为float,python,pandas,numpy,Python,Pandas,Numpy,我正在清理一个文件以清除无效的电话号码。我想用空值替换无效的电话。当我用空格替换无效值时,效果很好。当我试图用np.nan替换无效值以便获得空值时,python将我的列类型表单对象更改为float。 ''' 什么时候 我跑 我明白了 7864525885 3055276596 7868887478 7035980427 Name: Mobile, Length: 167, dtype: object 为什么会发生这种情况?这是因为nan的类型是浮点型 Pandas实际上使用numpy包(ak

我正在清理一个文件以清除无效的电话号码。我想用空值替换无效的电话。当我用空格替换无效值时,效果很好。当我试图用np.nan替换无效值以便获得空值时,python将我的列类型表单对象更改为float。 '''

什么时候 我跑

我明白了

7864525885
3055276596
7868887478
7035980427

Name: Mobile, Length: 167, dtype: object

为什么会发生这种情况?

这是因为nan的类型是浮点型

Pandas实际上使用numpy包(aka np.nan)中的nan值

正如@PaulPanzer的评论中提到的,如果您试图用以下方法检查np.nan的类型:

import numpy as np
print(type(np.nan))
您将看到它是float类型的

不幸的是,没有直接的方法可以解决这个问题,nan是浮动的,它将迫使列使用“更广泛的”数据表示


您可以为nan选择不同的表示形式,如blank或“?”,但您必须手动管理它。

如果使用pandas 0.24+,您可以执行以下操作:

dfr.replace(0, np.nan,regex=False).astype('Int64')
然后您可以将数据作为整数。

因为
type(np.nan)
float
import numpy as np
print(type(np.nan))
dfr.replace(0, np.nan,regex=False).astype('Int64')