分割日期和时间

时间:2019-06-28 12:16:01

标签: python python-3.x date

我有两列,即创建日期和结束日期,格式如下。 我只需要从各列中提取日期并尝试有所作为

0    12/31/2015 11:59:45 PM
1    12/31/2015 11:59:44 PM
2    12/31/2015 11:59:29 PM
3    12/31/2015 11:57:46 PM
4    12/31/2015 11:56:58 PM

我尝试使用str.split命令(使用空格分隔)仅从创建日期和结束日期中获取日期 但是,如果我尝试区别对待,则会出现以下错误:

  

--'str'和'str'的不受支持的操作数类型

a = nyc311['Created Date']
nyc311['Created Date Revised'] = a.str.split('[ ]').str.get(0)

b = nyc311['Closed Date']
nyc311['Closed Date Revised'] = b.str.split('[ ]').str.get(0)

nyc311['Request_Closing_Time'] = nyc311['Closed Date Revised'] -nyc311['Created Date Revised']

创建日期和结束日期按预期方式出现,但是,我需要实现从创建日期到结束日期的时间差,由于出现错误消息,所以这是不可能的。这可能是一个愚蠢的问题,我是python的新手。帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

我认为有些人已经问过这个问题并得到了答案,您可以在这里查看:How to calculate number of days between two given dates?

因此,如果我理解正确,则需要一个代码来获取两个日期或时间之间的差,而不是真正地如何正确地分割字符串?

您可以检查此功能:

   from datetime import datetime

   def _calculate_range(self, t1, t2):
    """ calculate time range between two different dates """
      try:

        fmt = '%Y-%m-%d %H:%M:%S'
        d1 = datetime.strptime(t1, fmt)
        d2 = datetime.strptime(t2, fmt)
        d1_ts = time.mktime(d1.timetuple())
        d2_ts = time.mktime(d2.timetuple())
        res = int(d2_ts - d1_ts) / 3600
        return res

您需要的是将字符串转换为datetime对象,因为您无法获得两个字符串之间的差异,您可以使用strptime方法来实现。您需要导入datetime以便可以使用该方法

答案 1 :(得分:1)

这是因为您的日期是字符串格式。您必须将它们转换为日期时间。这是一个工作原理示例:

import datetime

df = pd.DataFrame({'Created Date' : ['12/30/2015 11:59:45 PM', '01/10/2016 11:59:45 PM'],
                  'Closed Date' : ['12/31/2015 11:59:44 PM', '01/22/2016 11:59:44 PM']})

# First we use the split function and the datetime conversion in a list comprehension
df['Created Date'] = [datetime.datetime.strptime(x.split(' ')[0], '%m/%d/%Y') 
                      for x in df['Created Date']]
df ['Closed Date'] = [datetime.datetime.strptime(x.split(' ')[0], '%m/%d/%Y') 
                      for x in df['Closed Date']]

df['Request closing Date'] = df ['Closed Date'] - df['Created Date']

输出:

  Created Date Closed Date Request closing Date
0   2015-12-30  2015-12-31               1 days
1   2016-01-10  2016-01-22              12 days

答案 2 :(得分:1)

您可以使用strptime()函数剥离时间,然后找出它们之间的时差。下面的代码将从datetime对象'a'中剥离时间。

a = datetime.strptime(a, '%Y-%m-%d')

您也可以选中此link以获取更多信息

答案 3 :(得分:0)

尝试将游览日期时间列转换为实际日期时间(而不是字符串),并使用.date

nyc311['Created Date'] = pd.to_datetime(nyc311['Created Date'])
nyc311['Closed Date'] = pd.to_datetime(nyc311['Closed Date'])
nyc311['Request_Closing_Time'] = nyc311['Closed Date'].date() -nyc311['Created Date'].date()