按D对Pandas数据帧排序

2024-04-25 13:06:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据框,如下所示:

Symbol  Date
A       02/20/2015
A       01/15/2016
A       08/21/2015

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

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

所以现在我正在想办法让numpy把‘美国’日期转换成I So标准,这样我就可以把它们做成日期对象,这样我就可以按它们排序了。

我该如何将这些美国日期转换成ISO标准,或者我在熊猫身上缺少一种更直接的方法?


Tags: 数据对象方法numpypandas标准dateso
3条回答

可以使用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

对于以后的搜索,可以更改排序语句:

>>> 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方法一直是deprecated。现在是^{}。在使用df['Date']=pd.to_datetime(df['Date'])转换为datetime对象之后

df.sort_values(by=['Date'])

注:按的位置和/或降序(逆时间顺序)对进行排序:

df.sort_values(by=['Date'], inplace=True, ascending=False)

@JAB's answer快速而简洁。但它会改变您试图排序的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及更高版本,请使用^{},而不是现在已被弃用的ix

相关问题 更多 >