熊猫时间戳:修改日期和保留时间

时间:2019-09-20 13:15:13

标签: python pandas timestamp

我想修改pandas Timestamp变量的日期,但要保持时间不变。例如。具有以下时间戳记

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

我想将日期设置为2000年2月3日。修改后的打印语句

print(time_stamp_1)

应该返回

2000-02-03 13:59:00

3 个答案:

答案 0 :(得分:1)

使用Timestamp.replace

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

或仅将添加到Timestamp的时间转换为Timestamp.strftime提取的时间到timedelta

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

答案 1 :(得分:0)

还可以:

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

输出:

Timestamp('2000-02-03 13:59:00')

答案 2 :(得分:0)

您可以使用normalize

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

如果您拥有Seri​​es / 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