【问题标题】:Join date/time from two columns in dataframe into one将数据框中两列的日期/时间合并为一列
【发布时间】:2016-02-18 06:22:56
【问题描述】:

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

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

我想表达的格式是:

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

我想要的格式可能有时间错误,但我尝试了几次 to_datetime 转换,但都没有成功。

谢谢! 克里斯

【问题讨论】:

  • 是原始列字符串吗?
  • 你到底想要什么?一个新的日期时间列?如果是这样,您如何解释 00:00-8:00 和 09:00:00-08:00 列?单位是什么?
  • 0 2015-08-01T09:00:00-08:00 是从一些用于更新谷歌日历的谷歌 python 示例代码中提取的。我有一种感觉,最后4位数字是小时和分钟
  • 我原来的列是pandas中的日期时间对象
  • 如果您执行 type(df.iloc[0][0])type(df.iloc[0][1]) 会发生什么,其中 df 是您的数据框,01 是您的列...我不认为 00:00-8:00 是一个日期时间 .... 你还想如何将两个日期时间组合成一个日期时间?

标签: python datetime pandas time


【解决方案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

this,运行时返回以下内容

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

您可以像这样轻松地将 return startDat 交换为 return 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)

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

【讨论】:

    猜你喜欢
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2019-05-26
    • 2012-08-19
    • 2013-07-29
    • 2021-10-21
    相关资源
    最近更新 更多