#dataframe #replace #null #multiple-columns #missing-data
#dataframe #заменить #null #несколько столбцов #отсутствует-данные
Вопрос:
Я немного застрял на этом, так что, надеюсь, у кого-то есть лучшее руководство. В настоящее время у меня есть фрейм данных, который выглядит примерно так (только намного больше строк):
|"released_date"| "status" |
------------- --------
| 12/12/20 |released|
------------- --------
| 10/01/20 | NaN |
------------- --------
| NaN | NaN |
------------- --------
| NaN. |released|
------------- --------
Я хотел сделать df['status'].fillna('released' if df.released_date.notnull())
иначе, заполните любое значение Nan в столбце status df значением «released», если df.released_date не является нулевым значением.
Я продолжаю получать различные сообщения об ошибках, когда я делаю это, хотя в разных вариантах, сначала для приведенного выше кода это синтаксическая ошибка, которая, как я полагаю, вызвана тем, что notnull() возвращает логический массив?
Я чувствую, что для этого есть простой ответ, и я почему-то его не вижу. Я не нашел никаких подобных вопросов, где я пытаюсь организовать что-то на основе значений null в dataframe, что заставляет меня задуматься, не идеальна ли моя методология в первую очередь? Как я могу фильтровать значения в столбце фрейма данных на основе нулевых значений в другом столбце без использования isnull() или notnull(), если они в любом случае возвращают только логические массивы? использование == Null, похоже, тоже не работает…
Комментарии:
1. боже, это форматирование df выглядит грубо. но, надеюсь, это имеет смысл
Ответ №1:
Попробуйте:
idx = df[(df['status'].isnull()) amp; (~df['released_date'].isnull())].index
df.loc[idx,'status'] = 'released'
Сначала получите индекс всех строк со значением ‘status’, равным null, и значением ‘released_date’, равным null. Затем используйте df.loc
для обновления столбца состояния.
С принтами:
released_date status
0 12/12/20 released
1 10/01/20 released
2 NaN NaN
3 NaN released
Комментарии:
1. Рад, что смог помочь!