从列表中确定最新日期

时间:2014-04-26 09:48:29

标签: python datetime pandas

我试图从我存储在数据框中的日期列表中确定最新日期。问题是我不知道如何使用pandas比较日期时间元素列表。

基本上我试图做以下事情。

鉴于此数据集,Dates(或类似的东西)

  Date
0 1985-4-5
1 1985-2-9
2 1983-2-2
3 1998-1-12    

n=0
while(n<4):
   if Dates[n]['Date'] is-earlier-than Dates[n+1]['Date']
      latest=Dates[n+1]['Date']
   else:
      latest=Dates[n]['Date']
   n=n+1

如何将is-earlier-than替换为对Python有实际意义的内容?

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果您的Date列属于d datetime64[ns],那么您可以使用max方法:

In [35]: df = pd.DataFrame({'Date':pd.to_datetime(['1985-4-5', '1985-2-9', '1983-2-2', '1998-1-12'])})
In [44]: df
Out[44]: 
        Date
0 1985-04-05
1 1985-02-09
2 1983-02-02
3 1998-01-12

[4 rows x 1 columns]

In [45]: latest = df['Date'].max()

In [46]: print(latest)
1998-01-12 00:00:00

如果您的Date列由字符串组成,请先将它们转换为datetime64[ns]个对象:

In [47]: df = pd.DataFrame({'Date':['1985-4-5', '1985-2-9', '1983-2-2', '1998-1-12']})

In [48]: df['Date'] = pd.to_datetime(df['Date'])

In [49]: df['Date'].max()
Out[49]: Timestamp('1998-01-12 00:00:00')

如果您只想修改前4个日期中的最大值,那么您可以在调用max方法之前对系列进行切片:

In [51]: df['Date'][:4].max()
Out[51]: Timestamp('1998-01-12 00:00:00')

答案 1 :(得分:1)

您可以使用datetime模块和sorted(iterable[, cmp[, key[, reverse]]])函数使用reverse = true和key参数将字符串转换为datetime对象,在零索引处您将获得最新日期检查以下代码(读取评论):

>>> from datetime import datetime
>>> dates = ['1985-4-5', '1985-2-9', '1983-2-2', '1998-1-12'  ]
>>> sorted(
...    dates,  # list of dates input 
...    key = lambda d: datetime.strptime(d, '%Y-%m-%d'),  
...        # convert each string into date
...    reverse=True  # for decreasing order 
... )
['1998-1-12', '1985-4-5', '1985-2-9', '1983-2-2']
>>> sorted(
...    dates,  # list of dates input 
...    key = lambda d: datetime.strptime(d, '%Y-%m-%d'),  
...        # convert each string into date
...    reverse=True  # for decreasing order 
... )[0]
'1998-1-12' # latest 

您也可以使用max(iterable[, key]))功能:

>>> max(dates, key= lambda d: datetime.strptime(d, '%Y-%m-%d'))
'1998-1-12'
>>> min(dates, key= lambda d: datetime.strptime(d, '%Y-%m-%d'))
'1983-2-2'

检查classmethod datetime.strptime(date_string, format)¶以返回与date_string对应的日期时间,并根据格式进行解析。