[英]Sort Pandas Dataframe by Date
我有一個熊貓數據框,如下所示:
Symbol Date
A 02/20/2015
A 01/15/2016
A 08/21/2015
我想按Date
對其進行排序,但該列只是一個object
。
我試圖將該列設為日期對象,但遇到了該格式不是所需格式的問題。 所需格式為2015-02-20,
等。
所以現在我想弄清楚如何讓 numpy 將“美國”日期轉換為 ISO 標准,以便我可以將它們設為日期對象,以便我可以對它們進行排序。
我如何將這些美國日期轉換為 ISO 標准,或者是否有我在熊貓中缺少的更直接的方法?
您可以使用pd.to_datetime()
轉換為日期時間對象。 它需要一個格式參數,但在你的情況下,我認為你不需要它。
>>> import pandas as pd
>>> df = pd.DataFrame( {'Symbol':['A','A','A'] ,
'Date':['02/20/2015','01/15/2016','08/21/2015']})
>>> df
Date Symbol
0 02/20/2015 A
1 01/15/2016 A
2 08/21/2015 A
>>> df['Date'] =pd.to_datetime(df.Date)
>>> df.sort('Date') # This now sorts in date order
Date Symbol
0 2015-02-20 A
2 2015-08-21 A
1 2016-01-15 A
對於將來的搜索,您可以更改排序語句:
>>> df.sort_values(by='Date') # This now sorts in date order
Date Symbol
0 2015-02-20 A
2 2015-08-21 A
1 2016-01-15 A
sort
方法已被棄用並替換為sort_values
。 使用df['Date']=pd.to_datetime(df['Date'])
轉換為日期時間對象后
df.sort_values(by=['Date'])
注意:就地和/或降序排序(最近的第一個):
df.sort_values(by=['Date'], inplace=True, ascending=False)
@JAB 的回答快速而簡潔。 但它會更改您嘗試排序的DataFrame
,您可能想要也可能不想要。
(注意:您幾乎肯定會想要它,因為您的日期列應該是日期,而不是字符串!)
萬一您不想將日期更改為日期,您也可以采用不同的方式。
首先,從排序的Date
列中獲取索引:
In [25]: pd.to_datetime(df.Date).order().index
Out[25]: Int64Index([0, 2, 1], dtype='int64')
然后用它來索引你原來的DataFrame
,保持原樣:
In [26]: df.ix[pd.to_datetime(df.Date).order().index]
Out[26]:
Date Symbol
0 2015-02-20 A
2 2015-08-21 A
1 2016-01-15 A
魔法!
注意:對於 Pandas 0.20.0 及更高版本,使用loc
而不是ix
,現在已棄用。
由於pandas >= 1.0.0
我們在DataFrame.sort_values
有key
參數。 這樣我們就可以通過指定一個鍵而不調整原始數據幀來對數據幀進行排序:
df.sort_values(by="Date", key=pd.to_datetime)
Symbol Date
0 A 02/20/2015
2 A 08/21/2015
1 A 01/15/2016
可以使用以下代碼讀取包含日期列的數據:
data = pd.csv(file_path,parse_dates=[date_column])
使用上述代碼行讀取數據后,可以使用pd.date_time()
訪問包含有關日期信息的列,例如:
pd.date_time(data[date_column], format = '%d/%m/%y')
根據要求更改日期格式。
data['Date'] = data['Date'].apply(pd.to_datetime) 日期 #non-null datetime64[ns]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.