2025, Oct 07 15:31
QuantStats में benchmark जोड़ते ही pandas त्रुटि? इसे ऐसे ठीक करें
QuantStats में benchmark जोड़ते वक्त HTML टियर‑शीट पर pandas Series truth‑value त्रुटि आती है। कारण समझें और 0.0.70 पर डाउनग्रेड या 0.0.74 अपडेट से फिक्स करें.
एकल एसेट के लिए QuantStats की HTML टियर‑शीट बनाते समय सब कुछ ठीक चलता है। लेकिन जैसे ही आप बेंчमार्क जोड़ते हैं, कुछ उपयोगकर्ताओं को pandas की त्रुटि मिलती है और रिपोर्ट रुक जाती है। यह गाइड न्यूनतम पुनरुत्पादन, समस्या कहां टूटती है, और समर्थित QuantStats संस्करणों के जरिए इसे कैसे ठीक किया जा सकता है—इन सब पर क्रम से चलती है।
समस्या को दोहराना
समस्या तब सामने आती है जब आप बेंчमार्क के साथ HTML रिपोर्ट बनाते हैं। नीचे दिया स्निपेट GLD के दैनिक रिटर्न लाता है और टियर‑शीट में उसे SPY से तुलना करने की कोशिश करता है।
import quantstats as qs
qs.extend_pandas()
asset_ret = qs.utils.download_returns('GLD')
qs.reports.html(
    asset_ret,
    benchmark="SPY",
    title='Gold vs S&P 500',
    output='reports/gld_vs_spy.html'
)
समस्या वाले संस्करणों में, इसे चलाने पर इस तरह का अपवाद मिलता है:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
क्या हो रहा है
ट्रेसबैक दिखाता है कि QuantStats के अंदरूनी हिस्से kelly_criterion को कॉल करते हैं और Series पर pandas का truth‑value चेक लग जाता है, जिससे यही त्रुटि उठती है। इस व्यवहार को प्रोजेक्ट के issue tracker में ट्रैक किया गया और इसे कोड की गलती के रूप में पहचाना गया। रिपोर्ट के मुताबिक समस्या 0.0.71, 0.0.72 और 0.0.73 में आती है; 0.0.70 में सब ठीक चलता है, और 0.0.74 में इसे ठीक कर दिया गया है।
इसे कैसे ठीक करें
दो सुरक्षित रास्ते हैं। पहला, QuantStats को उस भरोसेमंद रिलीज़ पर डाउनग्रेड करें जिसमें बेंчमार्क जोड़ने पर यह त्रुटि नहीं आती। दूसरा, उस रिलीज़ पर अपडेट करें जिसमें फिक्स शामिल है।
कार्यरत पुराने संस्करण के लिए:
pip install --upgrade quantstats==0.0.70
जिस संस्करण में बग ठीक है, उसके लिए:
pip install --upgrade quantstats==0.0.74
जैसे ही आपका वातावरण कार्यरत रिलीज़ पर आ जाता है, यही कोड अपेक्षा के अनुरूप HTML टियर‑शीट बना देगा:
import quantstats as qs
qs.extend_pandas()
asset_ret = qs.utils.download_returns('GLD')
qs.reports.html(
    asset_ret,
    benchmark="SPY",
    title='Gold vs S&P 500',
    output='reports/gld_vs_spy.html'
)
यह क्यों मायने रखता है
एनालिटिक्स लाइब्रेरीज़ में छोटे‑छोटे संस्करण बदलाव भी व्यवहार को सूक्ष्म तरीकों से बदल सकते हैं। यहां एक सामान्य बेंचमार्क तुलना ने अंदरूनी शर्त को ट्रिगर किया और फिक्स्ड संस्करण आने तक रिपोर्ट जनरेशन टूटती रही। संस्करण‑विशिष्ट व्यवहार के बारे में जागरूकता होने से आप उस कोड को डीबग करने में समय बर्बाद करने से बचते हैं जो अन्यथा सही है।
मुख्य बातें
अगर किसी लाइब्रेरी अपडेट के बाद आपका स्थिर वर्कफ़्लो अचानक फेल होने लगे, तो प्रोजेक्ट का issue tracker देखें और पुष्टि करें कि यह रिग्रेशन ज्ञात है और ठीक किया जा चुका है या नहीं। जब पुनरुत्पादन महत्वपूर्ण हो, तो अपने वातावरण में सटीक संस्करण पिन करें। इसी मामले में, बेंчमार्क के साथ QuantStats रिपोर्ट 0.0.70 में काम करती है और 0.0.74 में फिर से ठीक हो जाती है।
यह लेख StackOverflow पर प्रश्न (लेखक: Dame Skytower) और furas के उत्तर पर आधारित है।