Как преобразовать все столбцы в Pandas DataFrame в «объект», игнорируя при этом NaN? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть фрейм данных, для которого я хочу, чтобы каждый столбец был в строковом формате.Поэтому я делаю это:

 df = df.astype(str)

Проблема в том, что таким образом все записи NaN преобразуются в строку 'nan'.И isnull возвращает false.Есть ли способ преобразовать в строку, но оставить пустую запись как есть?

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Когда вы делаете 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)
0 голосов
/ 09 октября 2018

Для серии вы можете использовать astype только для той части, которая равна notnull без необходимости повторной замены NaN s

df = pd.DataFrame([1, np.nan, 'String'])
df[df.notnull()] = df[df.notnull()].astype(str)

Как отмечено в комментариях, для DataFrameВы можете использовать

df.where(df.notnull(), df.astype(str))
0 голосов
/ 09 октября 2018

Конвертируйте ваши нулевые значения в пустые строки, а затем приведите кадр данных как строковый тип.

df.replace(np.nan, '').astype(str)

Обратите внимание, что вы можете проверить 'null' с помощью:

df.apply(lambda s: s.str.len() == 0) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...