मैं उत्कृष्ट मौसम संबंधी डायग्नोस्टिक डेटा की बड़ी मात्रा से निपटने के लिए उत्कृष्ट pandas
पैकेज का उपयोग कर रहा हूं और मैं डेटा को एकसाथ सिलाई के रूप में जल्दी से आयामों से बाहर चला रहा हूं। प्रलेखन को देखते हुए, यह हो सकता है कि MultiIndex
का उपयोग करके मेरी समस्या हल हो सकती है, लेकिन मुझे यकीन नहीं है कि यह मेरी स्थिति पर कैसे लागू करें - दस्तावेज़ीकरण यादृच्छिक डेटा और DataFrame
एस के साथ मल्टी इंडेक्स बनाने के उदाहरण दिखाता है, लेकिन पूर्व में श्रृंखला नहीं है मौजूदा समय सारिणी डेटा।मैं अपने पांडा डेटा समूह को 3 से अधिक आयामों में कैसे सामान्यीकृत कर सकता हूं?
पृष्ठभूमि
बुनियादी डेटा संरचना मैं उपयोग कर रहा हूँ दो मुख्य क्षेत्रों में शामिल हैं:
metadata
, जो वर्णन कर क्या नंबर दिए गए हैं कुंजी-मान जोड़ों से मिलकर शब्दकोश हैdata
, जो एक पांडा डेटा संरचना है जिसमें संख्याएं स्वयं हैं।
सबसे कम आम विभाजक, timeseries डेटा है तो बुनियादी संरचना data
प्रविष्टि के रूप में एक पांडा Series
वस्तु है, और metadata
क्षेत्र बताता है कि उन संख्याओं को वास्तव में अधिक 10 मीटर हवा के लिए (उदाहरण के लिए वेक्टर आरएमएस त्रुटि हो सकती हैं प्रयोग टेस्ट 1 से 24 घंटे के पूर्वानुमान के लिए पूर्वी प्रशांत)।
मैं परिणाम को और अधिक उपयोगी बनाने और आसान संयोजनों की अनुमति देने के लिए विभिन्न समय-सारिणी को एक साथ जोड़कर देख रहा हूं। उदाहरण के लिए, मैं सभी अलग-अलग लीड टाइम्स देख सकता हूं - मेरे पास एक फ़िल्टर दिनचर्या है जो मेरी टाइमरीज़ लेती है जो लीड टाइम (उदाहरण के लिए प्रयोग, क्षेत्र इत्यादि) के लिए को छोड़कर एक ही मेटाडेटा प्रविष्टियां साझा करती है और एक नया ऑब्जेक्ट जहां metadata
फ़ील्ड में केवल सामान्य प्रविष्टियां होती हैं (यानी Lead Time
हटा दी गई है) और अब data
फ़ील्ड Lead Time
मान द्वारा दिए गए कॉलम लेबल के साथ एक पांडा DataFrame
है। मैं इसे फिर से बढ़ा सकता हूं और कह सकता हूं कि मैं परिणामी फ्रेम और समूह उन्हें लेना चाहता हूं, साथ ही मुझे एक और प्रविष्टि अलग-अलग (उदाहरण के लिए Experiment
) के साथ एक पांडा Panel
देने के लिए। मेरी प्रविष्टि के लिए जहां आइटम इंडेक्स को Experiment
मेटाडेटा मानों द्वारा घटक फ्रेम से दिया जाता है और ऑब्जेक्ट के नए मेटाडाटा में Lead Time
या Experiment
नहीं होता है।
जब मैं इन समग्र वस्तुओं से अधिक पुनरावृति, मैं पैनल कि उचित मेटाडाटा/डेटा जोड़ी को फिर से संगठित रूप में मैं समय सीमा के साथ फ्रेम से एक आयाम (यानी श्रृंखला छोड़ बदलती के लिए फ्रेम के लिए एक iterseries
दिनचर्या और iterframes
दिनचर्या है कॉलम में उसके माता-पिता प्लसLead Time
फ़ील्ड कॉलम लेबल से लिया गया मान के साथ पुनर्स्थापित किया जाएगा) के सभी मेटाडेटा होंगे। यह बहुत अच्छा काम करता है।
समस्या
मैं आयाम समाप्त हो चुकी है (अप करने के लिए 3 डी एक पैनल के साथ) और मैं एक बार में सब कुछ गठबंधन है भी dropna
जैसी चीजों का उपयोग करने के खाली कॉलम को हटाने में सक्षम नहीं कर रहा हूँ पैनल (सारांश आंकड़ों की साजिश करते समय इसने कई बग का नेतृत्व किया है)। उच्च-आयामी डेटा वाले पांडा का उपयोग करने के बारे में पढ़ने से MultiIndex
और इसके उपयोग के बारे में पढ़ना पड़ा है। मैंने प्रलेखन में दिए गए उदाहरणों का प्रयास किया है, लेकिन मैं अभी भी थोड़ा अस्पष्ट हूं कि इसे मेरी स्थिति में कैसे लागू किया जाए। कोई भी दिशा उपयोगी होगी।मैं करने में सक्षम होना चाहते हैं:
- में मेरी
Series
आधारित डेटा कम्बाइन एक बहु अनुक्रमितDataFrame
आयामों की एक मनमाना संख्या के साथ (यह बहुत अच्छा होगा - यह से फ्रेम बनाने के लिए एक कॉल को खत्म करेगा श्रृंखला, और फिर फ्रेम से पैनल बनाने के लिए एक और) - परिणामस्वरूप बहु-अनुक्रमित
DataFrame
पर एक आयाम छोड़कर, मैं घटक मेटाडेटा को रीसेट कर सकता हूं।
संपादित करें - कोड नमूना जोड़े
नीचे वेस मैककिनी का जवाब है मैं लगभग वास्तव में क्या जरूरत है - मुद्दा सीरीज समर्थित भंडारण वस्तुओं मैं अपने DataFrame के साथ काम करना है से प्रारंभिक अनुवाद में है एक बार जब मैं तत्वों को समूहबद्ध करना शुरू करता हूं तो बैब्जेक्ट ऑब्जेक्ट्स। डेटा-फ़्रेम-बैकड क्लास में निम्न विधि है जो श्रृंखला-आधारित ऑब्जेक्ट्स और मेटाडेटा फ़ील्ड की एक सूची लेती है जो कॉलम में भिन्न होगी।
@classmethod
def from_list(cls, results_list, column_key):
"""
Populate object from a list of results that all share the metadata except
for the field `column_key`.
"""
# Need two copies of the input results - one for building the object
# data and one for building the object metadata
for_data, for_metadata = itertools.tee(results_list)
self = cls()
self.column_key = column_key
self.metadata = next(for_metadata).metadata.copy()
if column_key in self.metadata:
del self.metadata[column_key]
self.data = pandas.DataFrame(dict(((transform(r[column_key]), r.data)
for r in for_data)))
return self
विभिन्न कार्यों एक बार मैं फ्रेम इस दिनचर्या द्वारा दिए गए है, मैं आसानी से लागू कर सकते हैं नीचे सुझाव दिया - यह स्टोर करने के लिए की आवश्यकता समाप्त - विशेष रूप से उपयोगिता की है जब मैं कॉल concat
names
क्षेत्र उपयोग करने में सक्षम किया जा रहा है कॉलम कुंजी का नाम आंतरिक रूप से का नाम है क्योंकि यह मल्टीइंडेक्स में उस अनुक्रमणिका आयाम के नाम के रूप में संग्रहीत है।
मैं नीचे दिए गए समाधान को लागू करने में सक्षम होना चाहता हूं और केवल श्रृंखला-समर्थित वर्गों की सूची और कुंजी की एक सूची लेना चाहता हूं और अनुक्रमिक रूप से समूह करना चाहता हूं। हालांकि, मैं नहीं जानता कि क्या कॉलम समय से आगे का प्रतिनिधित्व किया जाएगा, ताकि:
- यह वास्तव में मेरे लिए कोई मतलब नहीं है एक 1-डी DataFrame
- मैं डॉन में सीरीज डाटा स्टोर करने 'टी देखते हैं कि कैसे सूचकांक के नाम और प्रारंभिक श्रृंखला से स्तंभ स्थापित करने के लिए -> फ्रेम
अच्छा! ऐसा लगता है कि मुझे इसकी आवश्यकता हो सकती है - अब वास्तव में इसे देखने और देखने के लिए। –
मैं अंततः पूरी तरह से एन-आयामी वस्तु रखने की योजना बना रहा हूं, लेकिन यह कई मामलों में बिल्कुल आवश्यक नहीं है –
ठीक है - मुझे लगता है कि सब कुछ का पालन करें लेकिन पहला कदम (यानी मुझे प्रारंभिक डेटाफ्रेम होने के बाद इसे प्राप्त होता है)। क्या इसका मतलब यह है कि मुझे सीरीज़ ऑब्जेक्ट्स (मूल डेटा संरचनाओं में) की अपनी सूची लेने और डेटाफ्रेम बनाने की आवश्यकता होगी, कुछ आरंभिक जुड़ने की विधि का उपयोग करके और फिर संगतता की श्रृंखला को पार करें और क्या ऐसा करने का एक बेहतर तरीका है ? –