将“”替换为np.nan会将数据类型转换为浮点型

2024-05-13 13:52:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫df如下:

 +------+----+
 |  x   |  y |
 +------+----+
 |ABCD  | -  |           
 |DEFG  | -  |
 +------+----+

数据类型为xy的对象,使用下面的

df = df.replace('-', np.NaN)

它将y列的数据类型转换为float,而y列的数据类型应保持为object。另外,当我试图找出用NA值替换后具有NA值的列的列表时,它不会显示任何具有NA值的列,而列y具有NA值。为什么会出现这个问题

编辑:我可以找到如下具有NA值的列

df.columns[df.isna().any()].tolist()

Tags: columns数据对象编辑df列表objectnp
1条回答
网友
1楼 · 发布于 2024-05-13 13:52:33

原因是只有列中的NaN将列转换为浮点数。可能的解决方案是由原始dtype使用^{}

df = df.replace('-',np.NaN).astype(df.dtypes)

print (df.dtypes)
x    object
y    object
dtype: object

print (df.applymap(type))
               x                y
0  <class 'str'>  <class 'float'>
1  <class 'str'>  <class 'float'>

如果需要缺少值的测试列,请使用:

print (df.columns[df.isna().any()])
Index(['y'], dtype='object')

另一个类似的想法是只提取NAN列并将其转换为对象:

df = df.replace('-',np.NaN)


d = dict.fromkeys(df.columns[df.isna().all()], 'object')
print (d)
{'y': 'object'}

df = df.astype(d)

print (df.dtypes)
x    object
y    object
dtype: object

相关问题 更多 >