操纵时间戳,以便新时间戳仍然有效

时间:2019-04-29 10:27:03

标签: python datetime

我有一个pandas数据框,其中一列的每个单元格都包含一个时间戳记,保存为字符串:

>>>dataset['DateTime'][1]
'2018-03-14 00:34:46'

我想创建一个新列,其中以下列方式操纵这些日期:

year + = 1,

month + = 2,

day + = 3,

小时+ = 4,

分钟+ = 5,

秒+ = 6

(此操作的重要之处在于,初始日期和新日期之间存在一对一的关系,因此我可以稍后再转换日期)

对于我来说,我正在寻找的输出如下:

>>> dataset['newTimestamp'][1]
'2019-05-17 04:39:52'

为此,我使用datetime库创建日期时间对象(作为测试,我首先从一个变量开始):

timestamp = dataset['DateTime'][1]
p = datetime.datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S")

目前,我正在对单个变量进行算术运算

year = p.year + 1

if p.month < 12:
    month = p.month + 1
else:
    month = 1
    year += 1

但是,与月份一样,在可以添加数值和不能添加数值时都存在例外,因此新时间戳仍然是真实时间戳(12 +1 = 13,这不是实际月份)。

我可以显式地为每条规则编程,但这似乎工作量太大,我希望有更好的方法。我怎么可以更快地做到这一点?

3 个答案:

答案 0 :(得分:2)

使用DateOffset
另外,请查看relativedelta模块中的此类操作:

dataset['newTimestamp'] = pd.to_datetime(dataset['DateTime']) + pd.DateOffset(years=1, months=2, days=3, hours=4, minutes=5, seconds=6)

答案 1 :(得分:0)

您应该试用beautiful-date库:

pip install beautiful-date

并像这样使用它:

from beautiful_date import *

...

dataset['DateTime'].apply(lambda d: d + 1 * years + 2 * months + ... + 6 * seconds)

应该可以解决问题。

答案 2 :(得分:0)

strptime()和strftime()是您要查找的函数。 只需继续使用Google的两个功能即可。毫无疑问,您将可以解决上述问题。 这些可以用来直接操纵日期时间量