2012-09-04 15 views
5

मैं प्रारूप के साथ कई CSV फ़ाइलों है:अजगर पांडा का उपयोग प्रारूप वर्ष, दिन, घंटे, मिन में तारीख के साथ सीएसवी पार्स करने के लिए, धारा

Year,Day,Hour,Min,Sec.,P1'S1 
2003, 1, 0, 0,12.22, 0.541 
2003, 1, 1, 0,20.69, 0.708 
2003, 1, 2, 0, 4.95, 0.520 
2003, 1, 3, 0,13.42, 0.539 
... 

(जहां दिन, की दिन है वर्ष) और मैं उन्हें पांडा लाइब्रेरी का उपयोग करके पढ़ने की कोशिश कर रहा हूं (अब तक एक शानदार lib लगता है)।

पांडा में सीएसवी पढ़ने के लिए एक अंतर्निहित फ़ंक्शन है, और इससे भी बेहतर, यह कार्य अनुमानित रूप से दिनांक प्रकार के लिए कॉलम की जांच करता है। और स्वचालित रूप से इसे एक इंडेक्स के रूप में उपयोग करता है (जो मैं कर रहा हूं उसके लिए बिल्कुल सही होगा)।

बात यह है कि, मैं इसे इस प्रारूप में दिनांक डेटा के साथ काम नहीं कर सकता।

मैंने कोशिश की:

data = pd.read_csv("csvFile.csv", index_col=[0, 1], , index_col=[0, 1, 2, 3, 4] parse_dates=True) 

लेकिन यह केवल हो जाता है साल सही ढंग से:

In [36]: data.index 
Out[36]: 
MultiIndex 
[(<Timestamp: 2003-09-04 00:00:00>, 1, 0, 0, 12.22) 
(<Timestamp: 2003-09-04 00:00:00>, 1, 1, 0, 20.69) 
(<Timestamp: 2003-09-04 00:00:00>, 1, 2, 0, 4.95) ..., 
(<Timestamp: 2003-09-04 00:00:00>, 365, 21, 0, 3.77) 
(<Timestamp: 2003-09-04 00:00:00>, 365, 22, 0, 14.6) 
(<Timestamp: 2003-09-04 00:00:00>, 365, 23, 0, 13.36)] 

प्रलेखन से, मुझे लगता है कि आप "date_parser" read_csv में विशेषता निर्दिष्ट कर सकते हैं पांडा का कार्य। लेकिन दस्तावेज़ीकरण यह नहीं दिखाता है कि मैं इसे कैसे समझ नहीं पा रहा हूं। कोई भी व्यक्ति जो इस विषय में अनुभव कर सकता है वह हाथ दे सकता है।

चीयर्स, ब्रूनो

उत्तर

11

आदेश में एक बहु-स्तंभ तिथि को पार्स करने के लिए, आप parse_dates=['Year','Day','Hour','Min','Sec']

तुम भी जरूरत है कहने की जरूरत है, पांडा जो कॉलम एक भी तारीख में जोड़ा जाना चाहिए बताने की आवश्यकता अपनी खुद की पार्सर कि प्रत्येक स्तंभ आप parse_dates में निर्दिष्ट से एक तत्व लेता है परिभाषित करने के लिए:

In [1]: import pandas as pd 

In [2]: from datetime import datetime, timedelta 

In [3]: from cStringIO import StringIO 

In [4]: data = """\ 
Year,Day,Hour,Min,Sec.,P1'S1 
2003, 1, 0, 0,12.22, 0.541 
2003, 1, 1, 0,20.69, 0.708 
2003, 1, 2, 0, 4.95, 0.520 
2003, 1, 3, 0,13.42, 0.539 
""" 

In [5]: def parse(yr, doy, hr, min, sec): 
    yr, doy, hr, min = [int(x) for x in [yr, doy, hr, min]] 
    sec = float(sec) 
    mu_sec = int((sec - int(sec)) * 1e6) 
    sec = int(sec) 
    dt = datetime(yr - 1, 12, 31) 
    delta = timedelta(days=doy, hours=hr, minutes=min, seconds=sec, 
         microseconds=mu_sec) 
    return dt + delta 
    ...: 

In [6]: pd.read_csv(StringIO(data), parse_dates={'datetime':  
      ['Year','Day','Hour','Min','Sec.']}, 
      date_parser=parse, index_col='datetime') 
Out[6]: 
          P1'S1 
datetime       
2003-01-01 00:00:12.220000 0.541 
2003-01-01 01:00:20.690000 0.708 
2003-01-01 02:00:04.950000 0.520 
2003-01-01 03:00:13.419999 0.539 
+0

मैं जाँच की, और समस्या यह है कि फ़ाइल "वर्ष" शीर्षक (सिर्फ साल मूल्यों की तरह से पहले एक स्थान है इसके नीचे)। अगर मैं 'वर्ष' बनने से पहले 'वर्ष' से पहले read_csv में एक जगह डालता हूं तो यह पूरी तरह से काम करता है। बहुत picky, लेकिन काम करता है। धन्यवाद! – jbssm

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^