将数据框中两个列的日期/时间合并为一个

1 投票
1 回答
541 浏览
提问于 2025-05-10 09:56

我有两列数据,想把它们合并成一列 pandas 列:

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

我希望合并后的格式是这样的:

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

我可能对我想要的格式的时间部分搞错了,但我尝试了几种 to_datetime 的转换方法,都没有成功。

谢谢!

克里斯

相关文章:

  • 暂无相关问题
暂无标签

1 个回答

1

Chris,

最简单的方法是用一个连接公式把每个单元格合并起来,像这样:

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)

现在,你可以用这些函数来填充新的列,显示开始日期、结束日期和经过的时间!

撰写回答