我想将两个列中的以下数据连接到一个pandas列中:
0 2015-08-01 00:00-8:00
我希望它的格式是:
0 2015-08-01T09:00:00-08:00
我可能在我希望的格式上有时间错误,但我尝试了几次to_datetime转换而没有运气。
谢谢! 克里斯
答案 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)
现在,您可以使用这些函数来填充包含开始日期,完成日期和已用时间的新列!