我有两列,即创建日期和结束日期,格式如下。 我只需要从各列中提取日期并尝试有所作为
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的新手。帮助将不胜感激。
答案 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()