मेरे पास एक एक्सेल फ़ाइल है जिसे 'nan_test.xlsx' कहा जाता है। जो इस तरह दिखता है (मूल में रिक्त स्थान हैं लेकिन जब अजगर में मुद्रित किया जाता है तो रिक्त स्थान को 'NaN' से बदल दिया जाता है:
ID Month1 Month2 Month3
0 ABC 1.0
1 FFF 2.0 2.0 2.0
2 XYZ 3.0 3.0
मैं रिक्त/नैन मानों को अनदेखा करते हुए मानक विचलन प्राप्त करने का प्रयास कर रहा हूं।
अभी तक मेरे पास यह है लेकिन व्यवहार हर जगह है। यह 3 संख्यात्मक मान, 2 संख्यात्मक मान और एक नान मान वाली पंक्ति के लिए std dev सही ढंग से करता है, लेकिन 2 nan मान और एक संख्यात्मक मान वाला नहीं।
df = pd.read_excel('nan_test.xlsx')
print(df)
df['std'] = np.nanstd(df.iloc[:, 1:], axis=1, ddof=1)
print(df)
ID Month1 Month2 Month3
0 ABC 1.0 NaN NaN
1 FFF 2.0 2.0 2.0
2 XYZ NaN 3.0 3.0
ID Month1 Month2 Month3 std
0 ABC 1.0 NaN NaN NaN
1 FFF 2.0 2.0 2.0 0.0
2 XYZ NaN 3.0 3.0 0.0
2 जवाब
यह ddof=1
के कारण पहली पंक्ति std
NaN
लौट रही है।
ddof : int, optional
Means Delta Degrees of Freedom. The divisor used in calculations is N - ddof,
where N represents the number of non-NaN elements. By default ddof is zero.
तो, पहली पंक्ति का N
1
है (अर्थात केवल 1 गैर-NaN मान है)। N - ddof = 1 - 1 = 0
. भाजक 0
है, इसलिए std
रिटर्न NaN
पहली पंक्ति के लिए आपको ddof=0
की आवश्यकता है
df['std'] = np.nanstd(df.iloc[:, 1:], axis=1, ddof=0)
Out[416]:
ID Month1 Month2 Month3 std
0 ABC 1.0 NaN NaN 0.0
1 FFF 2.0 2.0 2.0 0.0
2 XYZ NaN 3.0 3.0 0.0
मुद्दा यह है कि आप स्वतंत्रता की डेल्टा डिग्री (ddof
) को 1 पर सेट कर रहे हैं। जैसा कि np.nanstd
:
गणना में प्रयुक्त भाजक N - ddof है, जहाँ N गैर-NaN तत्वों की संख्या का प्रतिनिधित्व करता है। डिफ़ॉल्ट रूप से ddof शून्य है।
तो इसे 1 पर सेट करके, जब आपके पास केवल 1 मान होता है जो NaN नहीं है, तो भाजक 0 हो जाता है, और आपको NaN मिलता है।
यदि आप सेट ddof=0
में बदलते हैं, तो आपको पहली पंक्ति के मानक विचलन के लिए 0 का मान मिलता है
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।