将数据框中两列的日期/时间加入一个

时间:2015-11-17 01:07:36

标签: python datetime pandas time

我想将两个列中的以下数据连接到一个pandas列中:

0    2015-08-01   00:00-8:00

我希望它的格式是:

0 2015-08-01T09:00:00-08:00

我可能在我希望的格式上有时间错误,但我尝试了几次to_datetime转换而没有运气。

谢谢! 克里斯

1 个答案:

答案 0 :(得分:1)

克里斯,

最简单的方法是将每个单元格与一个串联公式组合如下:

new = cell1 + " " + cell2 + " " + cell3

但如果您希望保留日期完整性并可能进行一些简单的计算......这是我选择解决此问题的方法。

首先,我想澄清一下你的日期是一个时间跨度,但我们也可以用它来做有趣的事情。 为了便于参考,我已经模拟了你的数据(这只是为了显示目的 - 实际上不是一个矩阵)

您的数据如下所示

a    b             c    
0    2015-08-01    00:00-8:00
0    2015-09-03    6:00-17:00

请注意,小时范围没有可靠的长度,这可能不是您的数据的情况,但这是一个无论如何都可以使用的解决方案。

def combineTime(b,c):
  from datetime import datetime
  dashNum = c.find("-")
  start = (b + " " + c[:dashNum])
  finish = (b + " " + c[dashNum+1:])
  startDate = datetime.strptime(start, "%Y-%m-%d %H:%M")
  finishDate = datetime.strptime(finish, "%Y-%m-%d %H:%M")
  return startDate

这个,运行时,返回以下

>>> combineTime(b,c)
datetime.datetime(2015, 8, 1, 0, 0)

你可以轻松地交换返回startDat以返回finishDate,如此

def combineTime(b,c):
  from datetime import datetime
  dashNum = c.find("-")
  start = (b + " " + c[:dashNum])
  finish = (b + " " + c[dashNum+1:])
  startDate = datetime.strptime(start, "%Y-%m-%d %H:%M")
  finishDate = datetime.strptime(finish, "%Y-%m-%d %H:%M")
  return finishDate

返回

>>> combineTime(b,c)
datetime.datetime(2015, 8, 1, 8, 0)

然后你可以做一些有趣的事情,比如确定开始和结束之间的时间长度......就这样......

def elapseTime(b,c):
  from datetime import datetime
  dashNum = c.find("-")
  start = (b + " " + c[:dashNum])
  finish = (b + " " + c[dashNum+1:])
  startDate = datetime.strptime(start, "%Y-%m-%d %H:%M")
  finishDate = datetime.strptime(finish, "%Y-%m-%d %H:%M")
  timeDiff = finishDate - startDate
  elapHour = timeDiff.total_seconds()/3600
  return round(elapHour, 2)

现在,您可以使用这些函数来填充包含开始日期,完成日期和已用时间的新列!