将数据框中两个列的日期/时间合并为一个
我有两列数据,想把它们合并成一列 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)
现在,你可以用这些函数来填充新的列,显示开始日期、结束日期和经过的时间!