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