के साथ टाइमस्टैम्प संगतता समस्या मैंने कुछ नई कार्यक्षमताओं का लाभ उठाने के लिए केवल 0.17.1 से 0.21.0 तक पांडा को अद्यतन किया, और matplotlib (जिसे मैंने नवीनतम 2.1.0 में भी अपडेट किया) के साथ संगतता समस्या में भाग लिया। । विशेष रूप से, टाइमस्टैम्प ऑब्जेक्ट में काफी बदलाव आया है।/Matplotlibपांडा 0.21.0 matplotlib
मैं एक और मशीन अभी भी पांडा के पुराने संस्करणों (0.17.1) चल रहा है के लिए हो (1.5.1) जो मैं मतभेदों की तुलना करने के लिए इस्तेमाल:
दोनों संस्करणों dtype='datetime64[ns]
होने के लिए मेरी DataFrame सूचकांक दिखाने
DatetimeIndex(['2017-03-13', '2017-03-14', ... '2017-11-17'], type='datetime64[ns]', name='dates', length=170, freq=None)
लेकिन जब type(df.index[0])
बुला, 0.17.1 pandas.tslib.Timestamp
देता है और 0.21.0 pandas._libs.tslib.Timestamp
देता है।
जब x- अक्ष के रूप में df.index
साथ साजिश रचने: डिफ़ॉल्ट प्रारूपों पांडा 0.17.1 के लिए दिनांक के रूप में एक्स-अक्ष लेबल लेकिन पांडा 0.21.0 के लिए इसे पहचान करने में विफल रहता द्वारा
plt.plot(df.index, df['data'])
matplotlibs और केवल कच्चे देता है संख्या 1.5e18
(नैनोसेक में युग का समय)।
OverflowError: signed integer is greater than maximum
मैं सूचना एक्स-मूल्य डिबग में देख सकते हैं:
मैं भी एक स्वनिर्धारित कर्सर कि रिपोर्ट एक्स-मूल्य, जिसके साथ 0.21.0 के लिए विफल रहता है पर matplotlib.dates.DateFormatter
का उपयोग करके ग्राफ पर स्थान पर क्लिक किया है 0.17.1 के लिए लगभग 736500 (यानी दिन 0 से दिन की गणना) है लेकिन 0.21.0 के लिए लगभग 1.5e18 (यानी नैनोसेक युग समय) है।
मैटलप्लिब और पांडा के बीच संगतता के इस ब्रेक पर मुझे हैरान है क्योंकि ज्यादातर लोगों द्वारा स्पष्ट रूप से उपयोग किया जाता है। क्या मैं नए संस्करणों के लिए ऊपर प्लॉट फ़ंक्शन को कॉल करने के तरीके में कुछ खो रहा हूं?
अद्यतन के रूप में मैं ऊपर उल्लेख किया है, मैं सीधे कॉल पसंद करते हैं एक दिया कुल्हाड़ियों साथ plot
आपत्ति लेकिन बस की बिल्ली के लिए, मैं DataFrame ही df.plot()
की साजिश विधि बुला की कोशिश की। जैसे ही यह किया जाता है, सभी बाद के प्लॉट एक ही पायथन सत्र के भीतर टाइमस्टैम्प को सही ढंग से पहचानते हैं। ऐसा लगता है कि एक पर्यावरण चर सेट है, क्योंकि मैं एक और डेटाफ्रेम पुनः लोड कर सकता हूं या subplots
के साथ एक और अक्ष बना सकता हूं और 1.5e18
कहां दिखाता है। यह वास्तव में एक बग की तरह बदबू आ रही है के रूप में नवीनतम पांडा दस्तावेज़ कहते हैं pandas:
The plot method on Series and DataFrame is just a simple wrapper around plt.plot()
लेकिन स्पष्ट रूप से यह अजगर सत्र ऐसी है कि बाद के भूखंडों को ठीक से समय-चिह्न सूचकांक से निपटने के लिए कुछ नहीं करता है।
वास्तव में, बस ऊपर पांडा पर उदाहरण चल लिंक:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
कि क्या ts.plot()
के आधार पर कहा जाता है या नहीं, तो निम्न साजिश या तो सही ढंग से स्वरूपों तिथि या नहीं के रूप में एक्स-अक्ष:
plt.plot(ts.index,ts)
plt.show()
एक बार सदस्य साजिश कहलाती है, बाद में नई श्रृंखला या डेटाफ्रेम पर plt.plot
पर कॉल करने से सदस्य प्लॉट विधि को फिर से कॉल करने की आवश्यकता के बिना स्वचालित रूप से स्वत: अद्यतन हो जाएगा।
आप सही हैं, मुझे पांडास जिथब में खोले गए मुद्दे पर भी यही प्रतिक्रिया मिली है। मैं पांडा वेबसाइट से थोड़ी अधिक आधिकारिक विधि पोस्ट कर रहा हूं जिसे मैंने काम करने की कोशिश की है। –
क्या आपने इस विधि को भी आजमाया है? क्या आप इस पर रिपोर्ट कर सकते हैं कि यह काम कर रहा है या नहीं (इसे सैद्धांतिक रूप से करना चाहिए, लेकिन मैं कोशिश नहीं कर सका और यदि ऐसा नहीं है तो मैं जवाब को बेहतर ढंग से हटा दूंगा)। – ImportanceOfBeingErnest
मैंने कोशिश की और यह भी काम किया - मैं पांडा वेबसाइट से दो लाइनों का उपयोग कर समाप्त हुआ क्योंकि संभवतः वे भविष्य के सबूत होने की अधिक संभावना रखते हैं। –