Ошибка вычисления разницы во времени Панд - PullRequest
0 голосов
/ 02 июля 2018

У меня в столбце данных есть два временных столбца: с именами date1 и date2. Насколько я всегда предполагал, оба в формате date_time. Однако теперь мне нужно вычислить разницу в днях между ними, и она не работает.

Я выполняю следующий код для анализа данных:

df['month1'] = pd.DatetimeIndex(df['date1']).month
df['month2'] = pd.DatetimeIndex(df['date2']).month
print(df[["date1", "date2", "month1", "month2"]].head(10))
print(df["date1"].dtype)
print(df["date2"].dtype)

Вывод:

    date1         date2     month1  month2
0 2016-02-29   2017-01-01       1       1
1 2016-11-08   2017-01-01       1       1
2 2017-11-27   2009-06-01       1       6
3 2015-03-09   2014-07-01       1       7
4 2015-06-02   2014-07-01       1       7
5 2015-09-18   2017-01-01       1       1
6 2017-09-06   2017-07-01       1       7
7 2017-04-15   2009-06-01       1       6
8 2017-08-14   2014-07-01       1       7
9 2017-12-06   2014-07-01       1       7
datetime64[ns]
object

Как видите, месяц для date1 рассчитан неправильно! Последняя операция, которая не работает:

df["date_diff"] = (df["date1"]-df["date2"]).astype('timedelta64[D]')

, что приводит к следующей ошибке:

incompatible type [object] for a datetime/timedelta operation

Сначала я подумал, что это может быть связано с date2, поэтому я попытался:

df["date2_new"] = pd.to_datetime(df['date2'] - 315619200, unit = 's')

ведет к:

 unsupported operand type(s) for -: 'str' and 'int'

У кого-нибудь есть идеи, что мне нужно изменить?

1 Ответ

0 голосов
/ 02 июля 2018

Использовать метод доступа .dt с атрибутом days:

df[['date1','date2']] = df[['date1','date2']].apply(pd.to_datetime)
df['date_diff'] = (df['date1'] - df['date2']).dt.days

Выход:

       date1      date2  month1  month2  date_diff
0 2016-02-29 2017-01-01       1       1       -307
1 2016-11-08 2017-01-01       1       1        -54
2 2017-11-27 2009-06-01       1       6       3101
3 2015-03-09 2014-07-01       1       7        251
4 2015-06-02 2014-07-01       1       7        336
5 2015-09-18 2017-01-01       1       1       -471
6 2017-09-06 2017-07-01       1       7         67
7 2017-04-15 2009-06-01       1       6       2875
8 2017-08-14 2014-07-01       1       7       1140
9 2017-12-06 2014-07-01       1       7       1254
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...