Заполните пропущенные даты другим значением столбца

1

Я пытался сделать что-то, что мне показалось простым, но я столкнулся с проблемой, которую не понимаю. У меня есть два столбца: date_published и date_obtained, конечно, у меня есть все данные для date_obtained, но не для date_published. Мой подход состоял в том, чтобы заполнить отсутствующую date_published датой, полученной за минус 1 день (может также быть медианной разницей, но я ее проигнорирую).

DF выглядит так:

date_published    date_obtained
 2017-12-20        2017-12-22
    NaT            2017-12-23

И должно выглядеть так потом:

date_published    date_obtained
 2017-12-20        2017-12-22
 2017-12-22        2017-12-23

Я попробовал следующее:

date_delta=(Df.date_obtained-datetime.timedelta(days=1))
Df.loc['date_published']=Df.date_published.fillna((date_delta))

Но, к моему удивлению, это не заполнило никакой NaT, а также создало пропущенное значение во всем моем фрейме данных. Также попытался заполнить только Df.date_obtained, но результат был тот же. Что мне не хватает?

  • 0
    df['date_published'] = df.date_published.fillna(df.date_obtained - pd.Timedelta(days=1)) ли df['date_published'] = df.date_published.fillna(df.date_obtained - pd.Timedelta(days=1)) ?
  • 0
    Это действительно сработало! Не могли бы вы объяснить, в чем разница между Python обоих синтаксисов? У меня был похожий код, который использовал маску для замены на некоторые из них, и поэтому мне нужно было использовать .loc , так что я догадался, что и здесь это будет необходимо.
Теги:
pandas
date

1 ответ

1
Лучший ответ

Вы были почти там, вы должны были либо сделать:

u = df.date_obtained - pd.Timedelta(days=1)
df['date_published'] = df.date_published.fillna(u)

Или же,

df.loc[:, 'date_published'] = df.date_published.fillna(u)

Используя loc для ссылки на столбцы (в противном случае он попытается проверить индекс для переданной вами метки).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню