2016-07-19 10 views
5

में मैं निम्नलिखित कोड,पांडा KeyError: मूल्य नहीं सूचकांक

df = pd.read_csv(CsvFileName) 

p = df.pivot_table(index=['Hour'], columns='DOW', values='Changes', aggfunc=np.mean).round(0) 
p.fillna(0, inplace=True) 

p[["1Sun", "2Mon", "3Tue", "4Wed", "5Thu", "6Fri", "7Sat"]] = p[["1Sun", "2Mon", "3Tue", "4Wed", "5Thu", "6Fri", "7Sat"]].astype(int) 

यह हमेशा जब तक csv फ़ाइल (सभी सप्ताह के दिनों के) पर्याप्त कवरेज नहीं है काम कर रहा है है। जैसे, निम्नलिखित .csv फ़ाइल में, के लिए

DOW,Hour,Changes 
4Wed,01,237 
3Tue,07,2533 
1Sun,01,240 
3Tue,12,4407 
1Sun,09,2204 
1Sun,01,240 
1Sun,01,241 
1Sun,01,241 
3Tue,11,662 
4Wed,01,4 
2Mon,18,4737 
1Sun,15,240 
2Mon,02,4 
6Fri,01,1 
1Sun,01,240 
2Mon,19,2300 
2Mon,19,2532 

मैं हूँ निम्न त्रुटि मिलती है:

KeyError: "['5Thu' '7Sat'] not in index" 

यह एक बहुत ही आसान ठीक है लगता है, लेकिन मैं अभी भी अजगर करने के लिए नया हूँ यह जानने के लिए कि इसे कैसे ठीक किया जाए। कृपया मदद करे। धन्यवाद।

+0

बस 'p = p.astype (int)' अपर्याप्त है? यह कहना मुश्किल है कि आप इस तरह के कॉलम क्यों अनुक्रमणित कर रहे हैं, दो सूचियां समान दिखती हैं और आपके इनपुट डेटा से ऐसा नहीं लगता है कि आप * कॉलम को इस तरह से बाहर कर रहे हैं। – jedwards

+0

भले ही आप कॉलम को सब्सक्राइब करते हैं (यानी '[' 5Thu '' 7Sat ']') को छोड़ दें, फिर भी आप 'np.nan' को 'int' में डालने में त्रुटियों में भाग लेंगे। आप इस समस्या को स्कर्ट करने के लिए एक अलग भरने के मूल्य (अनुपलब्ध प्रविष्टियों के लिए) का उपयोग कर सकते हैं। – Alex

+0

आखिरकार मुझे इंडेक्स में सभी सप्ताह के दिनों की आवश्यकता होगी (उदाहरण के लिए, '5Thu' '7Sat'), क्योंकि मैं उन्हें अगली प्लॉट करूंगा। तो मैं औसत को प्रभावित किए बिना, उन सभी को जोड़ने के तरीकों की तलाश में हूं। – xpt

उत्तर

7

सभी कॉलम प्राप्त करने के लिए reindex का उपयोग करें। यह उन लोगों को सुरक्षित रखेगा जो पहले से मौजूद हैं और अन्यथा खाली कॉलम में डाल दें।

p = p.reindex(columns=['1Sun', '2Mon', '3Tue', '4Wed', '5Thu', '6Fri', '7Sat']) 

तो अपने पूरे कोड उदाहरण इस तरह दिखना चाहिए:

df = pd.read_csv(CsvFileName) 

p = df.pivot_table(index=['Hour'], columns='DOW', values='Changes', aggfunc=np.mean).round(0) 
p.fillna(0, inplace=True) 

columns = ["1Sun", "2Mon", "3Tue", "4Wed", "5Thu", "6Fri", "7Sat"] 
p = p.reindex(columns=columns) 
p[columns] = p[columns].astype(int) 
2

मैं एक बहुत ही इसी तरह की समस्या हुई। मुझे एक ही त्रुटि मिली क्योंकि सीएसवी में हेडर में रिक्त स्थान थे। मेरे सीएसवी एक हैडर "लिंग" निहित है और मैं इसे के रूप में सूचीबद्ध किया था:

[['Gender']] 

यदि यह बहुत आसान आप अपने csv का उपयोग करने के लिए, आप कोशिकाओं के किसी भी रिक्त स्थान क्लिप करने के लिए एक्सेल सूत्र trim() का उपयोग कर सकते है।

+0

मुझे डर है कि मेरा एक पूरी तरह से भिन्न मामला है: _ "यह तब तक काम कर रहा है जब तक सीएसवी फ़ाइल में पर्याप्त कवरेज न हो" _, भले ही symtoms *** समान *** हों। लेकिन हालांकि आपके इनपुट के लिए धन्यवाद। – xpt

संबंधित मुद्दे