2014-01-16 83 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')

相關問題