我正试图从存储在数据帧中的日期列表中确定最新日期。问题是,我不知道如何使用panda来比较日期时间元素列表。
从本质上讲,我正在努力做到以下几点。
给定这个数据集,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
如何用对Python真正有意义的东西来替换is-earlier-than
?
提前谢谢。
您可以使用datetime模块和带有reverse=true和key
参数的sorted(iterable[, cmp[, key[, reverse]]])
函数将字符串转换为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对应的datetime,根据格式解析。
如果Date
列的数据类型为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')