相对于object类型的列对python pandas数据帧进行排序

时间:2014-02-14 14:59:12

标签: python sorting pandas

我有一个类似于以下(子集)的数据框:

0        2014-01-23 17:01:09
1000     2014-01-23 17:38:28
2000     2014-01-23 18:08:28
3000     2014-01-23 18:33:10
4000     2014-01-24 14:19:28
5000     2014-01-24 14:31:04
6000     2014-01-23 18:34:53
7000     2014-01-23 17:15:36
8000     2014-01-23 19:31:45
9000     2014-01-23 19:23:06
10000    2014-01-23 17:58:15
Name: date, dtype: object

正如您所见,列date的列类型为object。所以,我想按时间顺序对这个专栏进行排序。因此在我的代码中我打电话

data = data.sort(['date'])

然而,结果如下:

0        2014-01-23 17:01:09
1000     2014-01-23 17:38:28
2000     2014-01-23 18:08:28
3000     2014-01-23 18:33:10
4000     2014-01-24 14:19:28
5000     2014-01-24 14:31:04
6000     2014-01-23 18:34:53
7000     2014-01-23 17:15:36
8000     2014-01-23 19:31:45
9000     2014-01-23 19:23:06
10000    2014-01-23 17:58:15
Name: date, dtype: object

所以,什么都没有排序。但为什么它不起作用?

更新:我现在在互联网上找到以下内容:

import dateutil
data['date'] = data['date'].apply(dateutil.parser.parse)
print str(data.dtypes)

的产率:

date        datetime64[ns]

但是,即使现在该类型显式设置为datetime对象,我仍然无法按时间顺序对其进行排序。现在,我真的很困惑。

更新2: 现在我在代码中执行了以下操作

    data['date'] = pd.to_datetime(data['date'])
    data = data.sort(['date'])

然而,它仍然没有效果。没有排序w.r.t.日期。

3 个答案:

答案 0 :(得分:1)

好的,我现在发现了。数据帧的索引也根据数据帧的排序顺序进行排列。那么,

的输出
print str(data['date'].ix[np.array(range(0,11))*1000])
print str(data[:20])

实际上是不同的。因此我没有看到任何影响排序,虽然一切都已经正确排序。但是,这极其反直觉!

为了创建更正的索引顺序,可以通过以下方式修复排列:

data = data.sort(['date'])
data.index = range(0,len(data))

其他评论:实际上,如果在大熊猫的文件中会有一个关于这种陷阱(和其他人)的评论,那将会很棒。它几乎把我逼疯了,只有一个同事才巧妙地知道这一点。

答案 1 :(得分:1)

谢谢,这对我帮助很大。

我唯一注意到的是

data = data.sort(['date'])

现已弃用,应为:

data = data.sort_values(by='date')

答案 2 :(得分:0)

将您的日期转换为pandas datetime。 像:

df['date'] = pd.to_datetime(df['date'])