2012-12-13 72 views
3

所以Python和pandas模塊似乎是matlab和R的一個很好的選擇。這就是爲什麼我最近切換到了這一點。那裏有資源,我搜索了論壇,但找不到任何類似的東西。如果您有指向某些教程或其他有用材料的鏈接,請將其發佈。由日期決定的熊貓數據框索引

Wes McKinney有一個關於熊貓的精美教程。 http://www.youtube.com/watch?v=w26x-z-BdWQ&list=FLJ5xKwlfj7wg8S_A5SgR6Wg&feature=mh_lolz

在1:10他展示了一個如何用日期而不是整數爲數據框中的行建立索引的例子。 我想做類似的事情。

區別在於我有3個變量Y1,Y2,Y3,每個變量都有一列時間戳X1,X2,X3。

TestFile.txt: 
X1 Y1 X2 Y2 X3 Y3 
27/11/2012 11.436 29/11/2012 20.631 4/12/2012 10.209 
28/11/2012 11.468 30/11/2012 20.185 5/12/2012 9.973 
29/11/2012 11.414 3/12/2012 19.962 6/12/2012 9.736 
30/11/2012 11.355 4/12/2012 19.562 7/12/2012 9.509 
3/12/2012 11.309 5/12/2012 18.908 10/12/2012 9.259 
4/12/2012 11.118 6/12/2012 18.288 11/12/2012 8.109 
5/12/2012 10.873 7/12/2012 17.973 
6/12/2012 10.582 10/12/2012 17.788 
7/12/2012 10.264 11/12/2012 17.554 
10/12/2012 9.886 
11/12/2012 9.164 

我想要做的4兩件事:其在西安的日期我

  1. 準數據彝族= 1,2,3

  2. 指數由行日期

  3. 刪除所有比2012年4月12日這是Y3的第一個日期的所有數據

  4. 可以按照日期和列只

這裏是一個描述瞭如何讀取數據的測試文件,以及如何打印訪問所有日期。 您可以看到X1被正確解析爲熊貓日期格式,但不是X2或X3。這就是我試圖通過指定 index_col = [0,2,4]

parse_dates做=真

TestFile.py: 
import pandas as pd 

df = pd.read_csv('TestFile.txt',sep='\t', index_col=[0,2,4], parse_dates = True) 

print 'pandas version: ', pd.__version__ 
print df 

給出輸出:

pandas version: 0.10.0b1 
X1   X2   X3    Y1  Y2  Y3     
2012-11-27 29/11/2012 4/12/2012 11.436 20.631 10.209 
2012-11-28 30/11/2012 5/12/2012 11.468 20.185 9.973 
2012-11-29 3/12/2012 6/12/2012 11.414 19.962 9.736 
2012-11-30 4/12/2012 7/12/2012 11.355 19.562 9.509 
2012-03-12 5/12/2012 10/12/2012 11.309 18.908 9.259 
2012-04-12 6/12/2012 11/12/2012 11.118 18.288 8.109 
2012-05-12 7/12/2012 None  10.873 17.973  NaN 
2012-06-12 10/12/2012 None  10.582 17.788  NaN 
2012-07-12 11/12/2012 None  10.264 17.554  NaN 
2012-10-12 None  None   9.886  NaN  NaN 
2012-11-12 None  None   9.164  NaN  NaN 

求購輸出:

   Y1  Y2  Y3     
2012-04-12 11.118 19.562 10.209 
2012-05-12 10.873 18.908 9.973 
2012-06-12 10.582 18.288 9.736 
2012-07-12 10.264 17.973 9.509 
2012-10-12 9.886 17.788 9.259 
2012-11-12 9.164 17.554 8.109 

如果你有任何想法如何做到這一點,你的幫助是非常感謝:)

回答

3

我認爲你的困惑是由於誤解了關於index_col的說法。當您將一列列傳遞給index_col時,pandas正在嘗試創建一個多索引,即具有多個列作爲索引的數據框,如多維表。它並不試圖通過連接多個列來創建單個索引。

一種可行的策略是使用輸入文件中適當的列對創建三個數據框,然後將它們連接起來。

X1 Y1 X2 Y2 X3 Y3 - >(X1,Y1)+(X2,Y2)+的數據幀的數據幀的數據幀(X3,Y3)

如果您正在使用熊貓的最新開發版本或者願意,這可以通過在read_csv()中使用新的parse_cols參數來簡化。或者您可以讀入所有數據,提取您需要的三個數據框,然後將它們連接起來。

最後,你可以用df.truncatebeforeafter參數來獲得你需要的DateRange。更簡單地說,您可以使用dropna()來忽略缺少值的日期。

希望這會有所幫助。請讓我們知道您使用的是什麼版本的熊貓。

+0

所以這個工程: df1 = pd.read_csv('TestFile.txt',sep ='\ t',index_col = 0,parse_dates = True,usecols = [0,1]) 這就提取了正確的日期對於第二個系列,但不解析日期: df2 = pd.read_csv('TestFile.txt',sep ='\ t',index_col = 0,parse_dates = True,usecols = [2,3]) – Marsmann

+0

If你在解析日期的時候遇到了麻煩,就像'read_csv()'一樣,然後別擔心 - 只需以字符串的形式讀取日期即可。在將數據連接到一個df後,_then_從包含日期字符串的列中創建日期時間索引。 – Aman

2

通過設置index_col=[0,2,4]您正在創建一個MultiIndex,這就是爲什麼您會得到該輸出。

對於你想read_csv的輸出將無法做到這一點。只讀單一數據幀併合並

+0

+1簡潔。我應該學習。 – Aman