2012-03-04 12 views
6

यह मेरी पहली बार पांडों की कोशिश कर रहा है। मुझे लगता है कि मेरे पास उचित उपयोग केस है, लेकिन मैं ठोकर खा रहा हूं। मैं एक पांडस डेटाफ्रेम में एक टैब सीमांकित फ़ाइल लोड करना चाहता हूं, फिर इसे प्रतीक द्वारा समूहित करें और टाइमस्टैम्प कॉलम द्वारा अनुक्रमित x.axis के साथ इसे प्लॉट करें। यहां डेटा का सबसेट है:पांडस डेटाफ्रेम - वांछित सूचकांक में डुप्लिकेट मान हैं

Symbol,Price,M1,M2,Volume,TimeStamp 
TBET,2.19,3,8.05,1124179,9:59:14 AM 
FUEL,3.949,9,1.15,109674,9:59:11 AM 
SUNH,4.37,6,0.09,24394,9:59:09 AM 
FUEL,3.9099,8,1.11,105265,9:59:09 AM 
TBET,2.18,2,8.03,1121629,9:59:05 AM 
ORBC,3.4,2,0.22,10509,9:59:02 AM 
FUEL,3.8599,7,1.07,102116,9:58:47 AM 
FUEL,3.8544,6,1.05,100116,9:58:40 AM 
GBR,3.83,4,0.46,64251,9:58:24 AM 
GBR,3.8,3,0.45,63211,9:58:20 AM 
XRA,3.6167,3,0.12,42310,9:58:08 AM 
GBR,3.75,2,0.34,47521,9:57:52 AM 
MPET,1.42,3,0.26,44600,9:57:52 AM 

टाइमस्टैम्प कॉलम के बारे में दो चीजें नोट करें;

  1. यह डुप्लिकेट मानों है और
  2. अंतराल अनियमित हैं।

मैंने सोचा कि मैं कुछ इस तरह कर सकता है ...

from pandas import * 
import pylab as plt 

df = read_csv('data.txt',index_col=5) 
df.sort(ascending=False) 

df.plot() 
plt.show() 

लेकिन read_csv विधि एक अपवाद को जन्म देती है "की कोशिश की स्तंभों सूचकांक के रूप में 1 एक्स लेकिन पाया डुप्लिकेट"। क्या कोई ऐसा विकल्प है जो मुझे डुप्लिकेट मानों के साथ एक इंडेक्स कॉलम निर्दिष्ट करने की अनुमति देगा?

मैं अपने अनियमित टाइमस्टैम्प अंतराल को एक दूसरे रिज़ॉल्यूशन में संरेखित करने में भी रूचि रखूंगा, फिर भी मैं एक दूसरे के लिए कई कार्यक्रमों को साजिश करना चाहता हूं, लेकिन शायद मैं एक अद्वितीय इंडेक्स पेश कर सकता हूं, फिर अपनी कीमतों को संरेखित कर सकता हूं?

उत्तर

4

मैं मैं अच्छा होगा लगता है कि कुछ विशेषताएं/उपयुक्तता का पता करने के अभी कई मुद्दों होनी: GH-856, GH-857, GH-858

हम वर्तमान समय श्रृंखला क्षमताओं का एक सुधार पर काम कर रहे और संरेखण कर दूसरी तरफ संकल्प अब संभव है (हालांकि डुप्लिकेट के साथ नहीं, इसलिए इसके लिए कुछ फ़ंक्शन लिखने की आवश्यकता होगी)। मैं डुप्लिकेट टाइमस्टैम्प को बेहतर तरीके से समर्थन देना चाहता हूं।

In [29]: df.pivot('Symbol', 'TimeStamp').stack() 
Out[29]: 
        M1 M2 Price Volume 
Symbol TimeStamp        
FUEL 9:58:40 AM 6 1.05 3.8544 100116 
     9:58:47 AM 7 1.07 3.8599 102116 
     9:59:09 AM 8 1.11 3.9099 105265 
     9:59:11 AM 9 1.15 3.9490 109674 
GBR 9:57:52 AM 2 0.34 3.7500 47521 
     9:58:20 AM 3 0.45 3.8000 63211 
     9:58:24 AM 4 0.46 3.8300 64251 
MPET 9:57:52 AM 3 0.26 1.4200 44600 
ORBC 9:59:02 AM 2 0.22 3.4000 10509 
SUNH 9:59:09 AM 6 0.09 4.3700 24394 
TBET 9:59:05 AM 2 8.03 2.1800 1121629 
     9:59:14 AM 3 8.05 2.1900 1124179 
XRA 9:58:08 AM 3 0.12 3.6167 42310 

ध्यान दें कि यह एक MultiIndex बनाया: बहरहाल, यह वास्तव में पैनल है (3 डी) डेटा, तो एक ही रास्ता है कि आप चीजों को बदल सकता है निम्नलिखित है। एक और तरीका है मैं इस मिल गया है हो सकता है:

In [32]: df.set_index(['Symbol', 'TimeStamp']) 
Out[32]: 
        Price M1 M2 Volume 
Symbol TimeStamp        
TBET 9:59:14 AM 2.1900 3 8.05 1124179 
FUEL 9:59:11 AM 3.9490 9 1.15 109674 
SUNH 9:59:09 AM 4.3700 6 0.09 24394 
FUEL 9:59:09 AM 3.9099 8 1.11 105265 
TBET 9:59:05 AM 2.1800 2 8.03 1121629 
ORBC 9:59:02 AM 3.4000 2 0.22 10509 
FUEL 9:58:47 AM 3.8599 7 1.07 102116 
     9:58:40 AM 3.8544 6 1.05 100116 
GBR 9:58:24 AM 3.8300 4 0.46 64251 
     9:58:20 AM 3.8000 3 0.45 63211 
XRA 9:58:08 AM 3.6167 3 0.12 42310 
GBR 9:57:52 AM 3.7500 2 0.34 47521 
MPET 9:57:52 AM 1.4200 3 0.26 44600 

In [33]: df.set_index(['Symbol', 'TimeStamp']).sortlevel(0) 
Out[33]: 
        Price M1 M2 Volume 
Symbol TimeStamp        
FUEL 9:58:40 AM 3.8544 6 1.05 100116 
     9:58:47 AM 3.8599 7 1.07 102116 
     9:59:09 AM 3.9099 8 1.11 105265 
     9:59:11 AM 3.9490 9 1.15 109674 
GBR 9:57:52 AM 3.7500 2 0.34 47521 
     9:58:20 AM 3.8000 3 0.45 63211 
     9:58:24 AM 3.8300 4 0.46 64251 
MPET 9:57:52 AM 1.4200 3 0.26 44600 
ORBC 9:59:02 AM 3.4000 2 0.22 10509 
SUNH 9:59:09 AM 4.3700 6 0.09 24394 
TBET 9:59:05 AM 2.1800 2 8.03 1121629 
     9:59:14 AM 2.1900 3 8.05 1124179 
XRA 9:58:08 AM 3.6167 3 0.12 42310 

तुम इतनी तरह एक सच्चे पैनल प्रारूप में यह डेटा प्राप्त कर सकते हैं:

In [35]: df.set_index(['TimeStamp', 'Symbol']).sortlevel(0).to_panel() 
Out[35]: 
<class 'pandas.core.panel.Panel'> 
Dimensions: 4 (items) x 11 (major) x 7 (minor) 
Items: Price to Volume 
Major axis: 9:57:52 AM to 9:59:14 AM 
Minor axis: FUEL to XRA 

In [36]: panel = df.set_index(['TimeStamp', 'Symbol']).sortlevel(0).to_panel() 

In [37]: panel['Price'] 
Out[37]: 
Symbol  FUEL GBR MPET ORBC SUNH TBET  XRA 
TimeStamp            
9:57:52 AM  NaN 3.75 1.42 NaN NaN NaN  NaN 
9:58:08 AM  NaN NaN NaN NaN NaN NaN 3.6167 
9:58:20 AM  NaN 3.80 NaN NaN NaN NaN  NaN 
9:58:24 AM  NaN 3.83 NaN NaN NaN NaN  NaN 
9:58:40 AM 3.8544 NaN NaN NaN NaN NaN  NaN 
9:58:47 AM 3.8599 NaN NaN NaN NaN NaN  NaN 
9:59:02 AM  NaN NaN NaN 3.4 NaN NaN  NaN 
9:59:05 AM  NaN NaN NaN NaN NaN 2.18  NaN 
9:59:09 AM 3.9099 NaN NaN NaN 4.37 NaN  NaN 
9:59:11 AM 3.9490 NaN NaN NaN NaN NaN  NaN 
9:59:14 AM  NaN NaN NaN NaN NaN 2.19  NaN 

आप फिर उस डेटा से कुछ भूखंडों उत्पन्न कर सकते हैं।

यहां ध्यान दें कि टाइमस्टैम्प अभी भी तारों के रूप में हैं - मुझे लगता है कि उन्हें पाइथन डेटाटाइम में परिवर्तित किया जा सकता है। समय ऑब्जेक्ट्स और चीजों के साथ काम करना थोड़ा आसान हो सकता है। मेरे पास कच्चे समय बनाम टाइमस्टैम्प (दिनांक + समय) के लिए बहुत अधिक समर्थन प्रदान करने की कई योजनाएं नहीं हैं, लेकिन यदि पर्याप्त लोगों को इसकी आवश्यकता है तो मुझे लगता है कि मुझे आश्वस्त किया जा सकता है :)

यदि आपके पास एक सेकंड पर कई अवलोकन हैं एक प्रतीक के लिए उपर्युक्त तरीकों में से कुछ काम नहीं करेंगे। लेकिन मैं पांडा की आगामी रिलीज में इसके लिए बेहतर समर्थन करना चाहता हूं, इसलिए आपके उपयोग के मामलों को जानना मेरे लिए उपयोगी होगा - मेलिंग सूची (पायस्टैट्समोडल्स) में शामिल होने पर विचार करें

+0

धन्यवाद। मैं pystatsmodels में शामिल हो जाऊँगा - अगर आप उपयोग के मामलों के साथ ठोकर खाने की तलाश में हैं, तो मैं उपजाऊ क्षेत्र हो सकता हूं। – kavu

+0

यदि कच्चे समय से आपका मतलब केवल नमूना दर के साथ पूर्णांक है, तो यहां एक अपवर्त है। वैज्ञानिक रिकॉर्डिंग की पूरी दुनिया उस दिशा में टाइमसाइरीज के विस्तार के लिए बेताब है ... – meteore