我想修改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
答案 0 :(得分:1)
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')
如果您拥有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)"
)