Как избежать генерации времени после вычитания таймделты - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть датафрейм, который выглядит так, как показано ниже

Year Birthday OnsetDate
5             2018/1/1
5             2018/2/2

теперь я использую вычитание столбца OnsetDate со столбцом Day

df['Birthday'] = df['OnsetDate'] - pd.to_timedelta(df['Day'], unit='Y')

но результат колонки "День рождения" смешивается со временем, как показано ниже

Birthday
2013/12/31 18:54:00
2013/1/30 18:54:00

результат - просто фиктивные данные, на чем я сосредоточился, это то, что время приведет к неточной дате после операции. Как можно избежать сгенерированного времени, чтобы я мог получить точные данные.

Второй вопрос, я объединяю вышеупомянутый кадр данных с другим кадром данных.

new.update(df)

и столбец «Новый» день рождения в рамке данных стал таким:

Birthday
1164394440000000000
1165949640000000000

так на самом деле вызвало это и каково решение?

1 Ответ

0 голосов
/ 06 сентября 2018

Первый вопрос, вы должны знать, что это не целый год, используя pd.to_timedelta. Если вы печатаете, вы можете увидеть 1 year = 365 days 05:49:12.

print(pd.to_timedelta(1, unit='Y'))
365 days 05:49:12

Если вы хотите избежать сгенерированного времени, вы можете использовать DateOffset.

from pandas.tseries.offsets import DateOffset
df['Year'] = df['Year'].apply(lambda x: DateOffset(years=x))
df['Birthday'] = df['OnsetDate'] - df['Year']
                    Year  OnsetDate   Birthday
0  <DateOffset: years=5> 2018-01-01 2013-01-01
1  <DateOffset: years=5> 2018-02-02 2013-02-02

Поскольку второй вопрос вызван типом столбца, вы можете использовать pd.to_datetime для его решения.

new['Birthday'] = pd.to_datetime(new['Birthday'])
...