कैसे ठीक करें: इनपुट में nan, अनंत, या dtype के लिए बहुत बड़ा मान है ('फ्लोट64')


पायथन का उपयोग करते समय आपके सामने आने वाली एक सामान्य त्रुटि है:

 ValueError: Input contains infinity or a value too large for dtype('float64').

यह त्रुटि आमतौर पर तब होती है जब आप स्किकिट-लर्न मॉड्यूल से किसी फ़ंक्शन का उपयोग करने का प्रयास करते हैं, लेकिन इनपुट के रूप में आप जिस डेटाफ़्रेम या मैट्रिक्स का उपयोग कर रहे हैं उसमें NaN मान या अनंत मान हैं।

निम्नलिखित उदाहरण दिखाता है कि व्यवहार में इस त्रुटि को कैसे हल किया जाए।

त्रुटि को पुन: उत्पन्न कैसे करें

मान लीजिए हमारे पास निम्नलिखित पांडा डेटाफ़्रेम हैं:

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' x1 ': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4],
                   ' x2 ': [1, 3, 3, 5, 2, 2, 1, np.inf, 0, 3, 4],
                   ' y ': [np.nan, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90]})

#view DataFrame
print (df)

    x1 x2 y
0 1 1.0 NaN
1 2 3.0 78.0
2 2 3.0 85.0
3 4 5.0 88.0
4 2 2.0 72.0
5 1 2.0 69.0
6 5 1.0 94.0
7 4 lower 94.0
8 2 0.0 88.0
9 4 3.0 92.0
10 4 4.0 90.0

अब मान लीजिए कि हम स्किकिट-लर्न फ़ंक्शंस का उपयोग करके एक एकाधिक रैखिक प्रतिगमन मॉडल को फिट करने का प्रयास कर रहे हैं:

 from sklearn. linear_model import LinearRegression

#initiate linear regression model
model = LinearRegression()

#define predictor and response variables
x, y = df[[' x1 ', ' x2 ']], df. y

#fit regression model
model. fit (x,y)

#print model intercept and coefficients
print (model. intercept_ , model. coef_ )

ValueError: Input contains infinity or a value too large for dtype('float64').

हमें एक त्रुटि प्राप्त हो रही है क्योंकि जिस डेटाफ़्रेम का हम उपयोग कर रहे हैं उसमें अनंत और NaN दोनों मान हैं।

त्रुटि को कैसे ठीक करें

इस त्रुटि को हल करने का तरीका सबसे पहले डेटाफ़्रेम से उन सभी पंक्तियों को हटाना है जिनमें अनंत या NaN मान शामिल हैं:

 #remove rows with any values that are not finite
df_new = df[np. isfinite (df). all ( 1 )]

#view updated DataFrame
print (df_new)

    x1 x2 y
1 2 3.0 78.0
2 2 3.0 85.0
3 4 5.0 88.0
4 2 2.0 72.0
5 1 2.0 69.0
6 5 1.0 94.0
8 2 0.0 88.0
9 4 3.0 92.0
10 4 4.0 90.0

अनंत या NaN मान वाली दो पंक्तियाँ हटा दी गई हैं।

अब हम अपने रैखिक प्रतिगमन मॉडल को फिट करने के लिए आगे बढ़ सकते हैं:

 from sklearn. linear_model import LinearRegression

#initiate linear regression model
model = LinearRegression()

#define predictor and response variables
x, y = df_new[[' x1 ', ' x2 ']], df_new. y

#fit regression model
model. fit (x,y)

#print model intercept and coefficients
print (model. intercept_ , model. coef_ )

69.85144124168515 [5.72727273 -0.93791574]

ध्यान दें कि इस बार हमें कोई त्रुटि नहीं मिली है क्योंकि हमने पहले डेटाफ़्रेम से अनंत या NaN मान वाली पंक्तियों को हटा दिया था।

अतिरिक्त संसाधन

निम्नलिखित ट्यूटोरियल बताते हैं कि पायथन में अन्य सामान्य त्रुटियों को कैसे ठीक किया जाए:

पायथन में कैसे ठीक करें: ऑब्जेक्ट ‘numpy.ndarray’ कॉल करने योग्य नहीं है
कैसे ठीक करें: लेखन त्रुटि: ऑब्जेक्ट ‘numpy.float64’ कॉल करने योग्य नहीं है
कैसे ठीक करें: प्रकार त्रुटि: अपेक्षित स्ट्रिंग या बाइट्स ऑब्जेक्ट

एक टिप्पणी जोड़ने

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *