मैं एक बड़ी पांडा DataFrame
एक पांडा DataFrame के एक सबसेट timestamps की सूची के साथ DatetimeIndex द्वारा अनुक्रमित चयन
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 3425100 entries, 2011-12-01 00:00:00 to 2011-12-31 23:59:59
Data columns:
sig_qual 3425100 non-null values
heave 3425100 non-null values
north 3425099 non-null values
west 3425097 non-null values
dtypes: float64(4)
मैं .ix[start_datetime:end_datetime]
का उपयोग कर कि DataFrame
का एक उपसमूह चुनने है और मैं एक peakdetect function जो रिटर्न को यह पारित दो अलग-अलग सूचियों में स्थानीय अधिकतमता और मिनीमा का सूचकांक और मूल्य। मैं अधिकतमता की सूचकांक स्थिति निकालता हूं और DataFrame.index
का उपयोग करता हूं मुझे पैंडस टाइमस्टैम्प की एक सूची मिलती है।
मैं टाइमस्टैम्प की सूची .ix[]
पर पास करके बड़े डेटाफ्रेम के प्रासंगिक सबसेट को निकालने का प्रयास करता हूं लेकिन यह हमेशा खाली DataFrame
वापस लौटता प्रतीत होता है। मैं टाइमस्टैम्प की सूची में लूप कर सकता हूं और DataFrame
से प्रासंगिक पंक्तियां प्राप्त कर सकता हूं लेकिन यह एक लंबी प्रक्रिया है और मैंने सोचा कि ix[]
को the docs के अनुसार मानों की एक सूची स्वीकार करनी चाहिए?
अद्यतन (हालांकि मैं पांडा 0.7 के लिए उदाहरण का उपयोग करता है numpy.datetime64
के numpy.ndarray
देखें):
y = raw_disp['heave'].ix[datetime(2011,12,30,0,0,0):datetime(2011,12,30,0,0,8)]
#csv representation of y time-series
2011-12-30 00:00:00,-310.0
2011-12-30 00:00:01,-238.0
2011-12-30 00:00:01.500000,-114.0
2011-12-30 00:00:02.500000,60.0
2011-12-30 00:00:03,185.0
2011-12-30 00:00:04,259.0
2011-12-30 00:00:04.500000,231.0
2011-12-30 00:00:05.500000,139.0
2011-12-30 00:00:06.500000,55.0
2011-12-30 00:00:07,-49.0
2011-12-30 00:00:08,-144.0
index = y.index
<class 'pandas.tseries.index.DatetimeIndex'>
[2011-12-30 00:00:00, ..., 2011-12-30 00:00:08]
Length: 11, Freq: None, Timezone: None
#_max returned from the peakdetect function, one local maxima for this 8 seconds period
_max = [[5, 259.0]]
indexes = [x[0] for x in _max]
#[5]
timestamps = [index[z] for z in indexes]
#[<Timestamp: 2011-12-30 00:00:04>]
print raw_disp.ix[timestamps]
#Empty DataFrame
#Columns: array([sig_qual, heave, north, west, extrema], dtype=object)
#Index: <class 'pandas.tseries.index.DatetimeIndex'>
#Length: 0, Freq: None, Timezone: None
for timestamp in timestamps:
print raw_disp.ix[timestamp]
#sig_qual 0
#heave 259
#north 27
#west 132
#extrema 0
#Name: 2011-12-30 00:00:04
अद्यतन 2: मैं created a gist, जो वास्तव में काम करता है, क्योंकि जब डेटा timestamps के सूचकांक कॉलम csv से में लोड किया जाता है की numpy सरणी के रूप में जमा हो जाती है वस्तुओं जो तारों के रूप में दिखाई देते हैं। मेरे अपने कोड के विपरीत जहां इंडेक्स <class 'pandas.tseries.index.DatetimeIndex'>
टाइप है और प्रत्येक तत्व <class 'pandas.lib.Timestamp'>
प्रकार है, मैंने सोचा कि pandas.lib.Timestamp
की एक सूची उत्तीर्ण करने से व्यक्तिगत टाइमस्टैम्प पास करने के समान ही काम होगा, क्या इसे एक बग माना जाएगा?
यदि मैं स्ट्रिंग्स की सूची के रूप में इंडेक्स के साथ मूल DataFrame
बना देता हूं, स्ट्रिंग्स की सूची के साथ पूछताछ ठीक काम करती है। यह डेटाफ्रेम के बाइट आकार को काफी हद तक बढ़ाता है।
अद्यतन 3: त्रुटि केवल बहुत बड़े DataFrames के साथ हो गया लगता है, मैं DataFrame (नीचे एक टिप्पणी में कुछ विस्तार) के विभिन्न आकार पर कोड reran और यह 2.7 मिलियन रिकॉर्ड के ऊपर एक DataFrame पर होने के लिए प्रकट होता । टाइमस्टैम्प के विरोध में तारों का उपयोग करना समस्या को हल करता है लेकिन स्मृति उपयोग को बढ़ाता है।
फिक्स्ड नवीनतम जिथब मास्टर (18/09/2012) में, पेज के नीचे वेस से टिप्पणी देखें।
उदाहरण के लिए धन्यवाद, यह है कि यह कैसे काम करने के लिए माना जाता है की मेरी समझ है, अब मैं यह कैसे अपने मूल प्रश्न में विफल हो रहा है का एक उदाहरण प्रदान की है था। – seumas
आप पांडा का किस संस्करण का उपयोग कर रहे हैं? क्या raw_disp साझा करना संभव है? मेरे लिए 'अपडेट' ठीक काम करता है, y.ix [timestamps] (y डेटटाइम इंडेक्स) अपेक्षित आउटपुट देता है (मैं raw_disp.ix [timestamps] नहीं कर सकता क्योंकि raw_disp उपलब्ध नहीं है।) –
पांडस संस्करण 0.8.1 , मैं छोटे डेटाफ्रेम पर त्रुटि को पुन: पेश करने का प्रयास कर रहा हूं लेकिन ऐसा नहीं होता है। जब मैं इसे 3 मिलियन से अधिक पंक्तियों के अपने बड़े डेटाफ्रेम पर आज़माता हूं तो मुझे एक खाली डेटाफ्रेम मिलता है। मैंने सफलतापूर्वक 2888264 पंक्तियों के डेटाफ्रेम पर त्रुटि को पुन: उत्पन्न किया है लेकिन यह 2665621 पंक्तियों के डेटाफ्रेम पर ठीक काम करता है।अगर मैं इसे पुन: पेश करना चाहता हूं तो मैं बड़ा डेटाफ्रेम अपलोड कर सकता हूं। – seumas