Pandas timestamp: изменение даты и времени хранения - PullRequest
2 голосов
/ 20 сентября 2019

Я хотел бы изменить дату переменной Timestamp панды, но оставить время таким, какое оно есть.Например, имея следующую метку времени

time_stamp_1 = pd.Timestamp('1900-1-1 13:59')

Я хотел бы установить дату на 3 февраля 2000 года. Т.е. после изменения оператор печати

print(time_stamp_1)

должен вернуть

2000-02-03 13:59:00

Ответы [ 3 ]

1 голос
/ 20 сентября 2019

Используйте Timestamp.replace:

print (time_stamp_1.replace(year=2000, month=2, day=3))
2000-02-03 13:59:00

Или добавьте к Timestamp только времена, преобразованные в timedelta со временем, извлеченным Timestamp.strftime:

print (pd.Timestamp('2000-02-03') + pd.Timedelta(time_stamp_1.strftime('%H:%M:%S')))
#alternative
print (pd.Timestamp('2000-02-03') + pd.to_timedelta(time_stamp_1.strftime('%H:%M:%S')))
2000-02-03 13:59:00
0 голосов
/ 20 сентября 2019

Вы можете сделать вычитание с помощью normalize

pd.to_datetime('2000-02-03') + (time_stamp_1 - time_stamp_1.normalize())
Timestamp('2000-02-03 13:59:00')

Это масштабируется намного лучше, если у вас есть Series / DataFrame, потому что он избегает .strftime, хотя медленнее для одной отметки времени.

import perfplot
import pandas as pd

perfplot.show(
    setup=lambda n: pd.Series([pd.Timestamp('1900-1-1 13:59')]*n), 
    kernels=[
        lambda s: pd.to_datetime('2000-02-03') + (s - s.dt.normalize()),
        lambda s: pd.Timestamp('2000-02-03') + pd.to_timedelta(s.dt.strftime('%H:%M:%S')),
    ],
    labels=["normalize", "strftime"],
    n_range=[2 ** k for k in range(16)],
    equality_check=None  # Because datetime type
    xlabel="len(s)"
)

enter image description here

0 голосов
/ 20 сентября 2019

также можно сделать:

new = pd.Timestamp('2000-02-03') + pd.Timedelta(str(time_stamp_1.time()))

вывод:

Timestamp('2000-02-03 13:59:00')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...