Я пытался сделать что-то, что мне показалось простым, но я столкнулся с проблемой, которую не понимаю. У меня есть два столбца: 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
, но результат был тот же. Что мне не хватает?
Вы были почти там, вы должны были либо сделать:
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
для ссылки на столбцы (в противном случае он попытается проверить индекс для переданной вами метки).
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))
?.loc
, так что я догадался, что и здесь это будет необходимо.