Python 更换'-';使用np.nan将数据类型转换为浮点型

Python 更换'-';使用np.nan将数据类型转换为浮点型,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫df如下: +------+----+ | x | y | +------+----+ |ABCD | - | |DEFG | - | +------+----+ 在使用下面的 df = df.replace('-', np.NaN) 它将列y的数据类型转换为float,而列y的数据类型应保持为object。此外,当我尝试查找在替换为NA值后具有NA值的列的列表时,它不会显示任何具有NA值的列,而列y具有NA值。为什么会出现这个问

我有一个熊猫
df
如下:

 +------+----+
 |  x   |  y |
 +------+----+
 |ABCD  | -  |           
 |DEFG  | -  |
 +------+----+
在使用下面的

df = df.replace('-', np.NaN)
它将列
y
的数据类型转换为float,而列
y
的数据类型应保持为object。此外,当我尝试查找在替换为NA值后具有NA值的列的列表时,它不会显示任何具有NA值的列,而列
y
具有NA值。为什么会出现这个问题

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

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

原因仅为列中的
NaN
s将列转换为浮点数。可能的解决方案由原始
dtype
s使用:

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'>
另一个类似的想法是只提取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

除了您所写的解决方案之外,还有其他替代方案吗?@user3046211-您能解释一下您的问题吗?为什么不能使用它?它起作用了,但我很好奇是否有其他解决方案。@user3046211-添加了另一个想法,我认为如果只需要将几个(或一个)c列转换为对象会更好
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