Условно заменяя пропущенные значения в Pandas - PullRequest
0 голосов
/ 05 ноября 2018

Я новичок в Python и изучаю несколько вещей.

У меня есть набор данных, который закодирован со строками. Список столбцы содержит имена всех столбцов в списке.

columns = ['median', 'p25th', 'p75th']

В этом наборе данных числа хранятся в виде строк. Некоторые столбцы не содержат чисел и представлены как UN следующим образом:

['110000' '75000' '73000' '70000' '65000' 'UN' '62000']

['95000' '55000' '50000' '43000' 'UN' '31500' '48000']

['125000' '90000' '105000' '80000' '75000' '102000' 'UN' '109000']

Мне нужно заменить UN на NaN , используя np.nan. Я использовал этот код ниже:

for column in columns:
    recent_grads.loc[column =='UN', column] = np.nan

Но я продолжаю получать эту ошибку:

Traceback (последний последний вызов):

Файл "", строка 15, в Recent_grads.loc [column == 'UN', столбец] = np.nan

Файл "", строка 194, в setitem Файл self._setitem_with_indexer (indexer, value) "", строка 332, в _setitem_with_indexer ключ, _ = convert_missing_indexer (idx)

Файл "", строка 2049, в convert_missing_indexer поднять KeyError («не может использовать один bool для индексации в setitem») KeyError: «не может использовать один bool для индексации в setitem»

Подскажите, пожалуйста, где я ошибаюсь? Извините, если это звучит слишком просто.

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете попробовать использовать Pandas DataFrame replace, как показано здесь

Данные

d = [['median', 'p25th', 'p75th'],
     ['110000','75000','73000','70000','65000','UN','62000'],
     ['95000','55000','50000','43000','UN','31500','48000'],
     ['125000','90000','80000','75000','102000','UN','109000']
    ]
recent_grads = pd.DataFrame(zip(*d[1:]), columns=d[0])
print(recent_grads)

   median  p25th   p75th
0  110000  95000  125000
1   75000  55000   90000
2   73000  50000   80000
3   70000  43000   75000
4   65000     UN  102000
5      UN  31500      UN
6   62000  48000  109000

код

import numpy as np
columns = ['median', 'p25th', 'p75th']
recent_grads[columns] = recent_grads[columns].replace('UN', np.nan)
print(recent_grads)

   median  p25th   p75th
0  110000  95000  125000
1   75000  55000   90000
2   73000  50000   80000
3   70000  43000   75000
4   65000    NaN  102000
5     NaN  31500     NaN
6   62000  48000  109000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...