按日期对Pandas Dataframe进行排序

nic*_*hel 54 python pandas

我有一个pandas数据帧如下:

Symbol  Date
A       02/20/2015
A       01/15/2016
A       08/21/2015
Run Code Online (Sandbox Code Playgroud)

我想按它排序Date,但列只是一个object.

我试图使列成为日期对象,但我遇到了一个问题,即该格式不是所需的格式.所需格式2015-02-20,

所以现在我想弄清楚如何将'美国'日期转换为ISO标准,以便我可以将它们作为日期对象,以便我可以按它们排序.

我如何将这些美国日期转换为ISO标准,还是我在熊猫中缺少一种更直接的方法?

JAB*_*JAB 90

您可以使用pd.to_datetime()转换为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
Run Code Online (Sandbox Code Playgroud)

对于将来的搜索,您可以更改排序语句:

>>> 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
Run Code Online (Sandbox Code Playgroud)


Hap*_*lop 42

DataFrames sort弃用该方法.现在是sort_values.使用后转换为datetime对象后df['Date']=pd.to_datetime(df['Date']),

df.sort_values(by=['Date'])
Run Code Online (Sandbox Code Playgroud)

注意:按原位排序和/或按降序排序(按时间顺序排列):

df.sort_values(by=['Date'], inplace=True, ascending=False)
Run Code Online (Sandbox Code Playgroud)

  • 我建议你使用它:df.sort_values(by = ['Date']) (2认同)

Lon*_*Rob 10

@ JAB的答案快速而简洁.但它改变了DataFrame你想要排序的东西,你可能想要也可能不想要.

(注意:你几乎肯定想要它,因为你的日期列应该是日期,而不是字符串!)

万一您不希望将日期更改为日期,您也可以采用不同的方式.

首先,从排序Date列中获取索引:

In [25]: pd.to_datetime(df.Date).order().index
Out[25]: Int64Index([0, 2, 1], dtype='int64')
Run Code Online (Sandbox Code Playgroud)

然后使用它来索引原始文件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
Run Code Online (Sandbox Code Playgroud)

魔法!

注意:对于Pandas版本0.20.0及更高版本,请使用loc而不是ix,现在已弃用.


Erf*_*fan 7

因为pandas >= 1.0.0我们有key争论DataFrame.sort_values。这样我们就可以通过指定键对数据帧进行排序,而无需调整原始数据帧:

df.sort_values(by="Date", key=pd.to_datetime)
Run Code Online (Sandbox Code Playgroud)
  Symbol        Date
0      A  02/20/2015
2      A  08/21/2015
1      A  01/15/2016
Run Code Online (Sandbox Code Playgroud)