Когда вы делаете astype(str)
, dtype всегда будет object
, который является dtype, который включает в себя смешанные столбцы.Таким образом, вы можете конвертировать его в object
, используя astype(str)
, как вы это делали, но затем заменить nan
на фактический NaN
(который по своей сути является плавающей точкой), позволяя вам получить к нему доступ с помощьютакие методы, как isnull
:
df.astype(str).replace('nan',np.nan)
Пример:
df = pd.DataFrame({'col1':['x',2,np.nan,'z']})
>>> df
col1
0 x
1 2
2 NaN
3 z
# Note the mixed str, int and null values:
>>> df.values
array([['x'],
[2],
[nan],
['z']], dtype=object)
df2 = df.astype(str).replace('nan',np.nan)
# Note that now you have only strings and null values:
>>> df2.values
array([['x'],
['2'],
[nan],
['z']], dtype=object)