我有一个类似于以下(子集)的数据框:
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.日期。
答案 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'])