2014-01-16 51 views
0

我正尝试使用熊猫0.13.0(和numpy 1.8.0)读取最初无序的数据。例如,示例数据如下所示:如何使用Pandas读取无序数据并对其进行排序?

date_time, weeks, score 
9/16/2013 14:05:00,73,160.9358 
10/4/2013 13:20:00,75,159.61304 
10/20/2013 13:44:00,78,158.06982 
11/9/2013 17:18:00,80,156.30614 
12/17/2013 14:20:00,86,158.5123664 
9/19/2012 14:18:00,21,155.20384 
7/7/2012 14:08:00,10,165.56546 
7/11/2012 12:23:00,11,162.0381 
7/14/2012 11:30:00,11,162.25856 
7/17/2012 14:15:00,12,160.71534 

请注意,日期无法正常工作,日后的日期和周数第一次。

当我在这个数据的读取,熊猫保持原来的顺序:

In [9]: df=pd.read_csv('2_decimated.csv') 
In [10]: df 
Out[10]: 
      date_time weeks  score 
0 2013-09-16 14:05:00  73 160.935800 
1 2013-10-04 13:20:00  75 159.613040 
2 2013-10-20 13:44:00  78 158.069820 
3 2013-11-09 17:18:00  80 156.306140 
4 2013-12-17 14:20:00  86 158.512366 
5 2012-09-19 14:18:00  21 155.203840 
6 2012-07-07 14:08:00  10 165.565460 
7 2012-07-11 12:23:00  11 162.038100 
8 2012-07-14 11:30:00  11 162.258560 
9 2012-07-17 14:15:00  12 160.715340 

当我打电话df.sort(columns='date_time', inplace=True),我得到:

  date_time weeks  score 
6 2012-07-07 14:08:00  10 165.565460 
7 2012-07-11 12:23:00  11 162.038100 
8 2012-07-14 11:30:00  11 162.258560 
9 2012-07-17 14:15:00  12 160.715340 
5 2012-09-19 14:18:00  21 155.203840 
0 2013-09-16 14:05:00  73 160.935800 
1 2013-10-04 13:20:00  75 159.613040 
2 2013-10-20 13:44:00  78 158.069820 
3 2013-11-09 17:18:00  80 156.306140 
4 2013-12-17 14:20:00  86 158.512366 

这是接近我想要的,但我想date_time作为索引,所以这可以是时间序列数据。调用df2.set_index('date_time')似乎做我想做的,就是

     weeks  score 
date_time        
2012-07-07 14:08:00  10 165.565460 
2012-07-11 12:23:00  11 162.038100 
2012-07-14 11:30:00  11 162.258560 
2012-07-17 14:15:00  12 160.715340 
2012-09-19 14:18:00  21 155.203840 
2013-09-16 14:05:00  73 160.935800 
2013-10-04 13:20:00  75 159.613040 
2013-10-20 13:44:00  78 158.069820 
2013-11-09 17:18:00  80 156.306140 
2013-12-17 14:20:00  86 158.512366 

但随后调用df.plot()显示了相同的情节和以前一样,然后当我再次调用df,可以研究它,DF已经记不清了新的指数,并返回到它的整数索引。基本上,似乎set_index函数不像我所期望的那样运行。

回答

0

我喜欢使用的数据框对象的from_csv方法:

In [1]: from pandas import DataFrame as df 

In [2]: df.from_csv('2_decimated.csv') 
Out[2]: 
         weeks  score 
date_time        
2013-09-16 14:05:00  73 160.935800 
2013-10-04 13:20:00  75 159.613040 
2013-10-20 13:44:00  78 158.069820 
2013-11-09 17:18:00  80 156.306140 
2013-12-17 14:20:00  86 158.512366 
2012-09-19 14:18:00  21 155.203840 
2012-07-07 14:08:00  10 165.565460 
2012-07-11 12:23:00  11 162.038100 
2012-07-14 11:30:00  11 162.258560 
2012-07-17 14:15:00  12 160.715340 

对战pd.read_csv:在你读通过df.from_csv的CSV

In [3]: import pandas as pd 

In [4]: pd.read_csv('2_decimated.csv') 
Out[4]: 
      date_time weeks  score 
0 9/16/2013 14:05:00  73 160.935800 
1 10/4/2013 13:20:00  75 159.613040 
2 10/20/2013 13:44:00  78 158.069820 
3 11/9/2013 17:18:00  80 156.306140 
4 12/17/2013 14:20:00  86 158.512366 
5 9/19/2012 14:18:00  21 155.203840 
6 7/7/2012 14:08:00  10 165.565460 
7 7/11/2012 12:23:00  11 162.038100 
8 7/14/2012 11:30:00  11 162.258560 
9 7/17/2012 14:15:00  12 160.715340 

,您可以使用sort_index( )对索引进行排序:

In [5]: df.from_csv('2_decimated.csv').sort_index() 
Out[5]: 
         weeks  score 
date_time        
2012-07-07 14:08:00  10 165.565460 
2012-07-11 12:23:00  11 162.038100 
2012-07-14 11:30:00  11 162.258560 
2012-07-17 14:15:00  12 160.715340 
2012-09-19 14:18:00  21 155.203840 
2013-09-16 14:05:00  73 160.935800 
2013-10-04 13:20:00  75 159.613040 
2013-10-20 13:44:00  78 158.069820 
2013-11-09 17:18:00  80 156.306140 
2013-12-17 14:20:00  86 158.512366 

这应该对您有所帮助。如果我完全误解了你的问题,请告诉我。

+1

我不推荐将'DataFrame作为df'导入,因为'df'通常用作DataFrame对象的名称。 – joris

1

set_index()返回一个视图,所以你需要调用df.set_index('date_time', inplace=True)或者df = df.set_index('date_time')

相关问题