我有一个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,这不是实际月份)。
我可以显式地为每条规则编程,但这似乎工作量太大,我希望有更好的方法。我怎么可以更快地做到这一点?
答案 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的两个功能即可。毫无疑问,您将可以解决上述问题。 这些可以用来直接操纵日期时间量