我有一个熊猫df
,如下所示:
+------+----+
| x | y |
+------+----+
|ABCD | - |
|DEFG | - |
+------+----+
以x
和y
的数据类型为对象,在使用以下将"-"替换为nan之后
df = df.replace('-', np.NaN)
它将列y
的数据类型转换为float,而列y
的数据类型应保留为object。此外,当我试图找出用NA值替换后具有NA值的列的列表时,它不显示任何具有NA值,而列y
具有NA值。为什么会引起这个问题?
编辑:我能够找到具有NA值的列,如下
df.columns[df.isna().any()].tolist()
原因是列中只有NaN
s将列转换为浮点值。可能的解决方案是由原始dtype
使用DataFrame.astype
:
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')
另一个类似的想法是只提取NaNs列并将其转换为对象:
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