我试图从我存储在数据框中的日期列表中确定最新日期。问题是我不知道如何使用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有实际意义的内容?
提前致谢。
答案 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对应的日期时间,并根据格式进行解析。