एक सीएसवी पढ़ते समय पंडों में सूचकांक कॉलम को हटाना


128

मेरे पास निम्नलिखित कोड है जो एक CSV फ़ाइल आयात करता है। 3 कॉलम हैं और मैं उनमें से पहले दो को चर पर सेट करना चाहता हूं। जब मैं चर "दक्षता" के लिए दूसरा कॉलम सेट करता हूं, तो इंडेक्स कॉलम भी निपटाया जाता है। मैं इंडेक्स कॉलम से कैसे छुटकारा पा सकता हूं?

df = pd.DataFrame.from_csv('Efficiency_Data.csv', header=0, parse_dates=False)
energy = df.index
efficiency = df.Efficiency
print efficiency

मैंने प्रयोग करने की कोशिश की

del df['index']

के बाद मैं सेट

energy = df.index

जो मुझे एक और पोस्ट में मिला, लेकिन इसका परिणाम "KeyError: 'index'" है

जवाबों:


70

DataFrames और Series में हमेशा एक Index होता है। यद्यपि यह कॉलम (नों) के साथ प्रदर्शित होता है, यह एक कॉलम नहीं है, यही वजह है कि del df['index']काम नहीं किया।

यदि आप सरल अनुक्रमिक संख्याओं के साथ सूचकांक को बदलना चाहते हैं, तो उपयोग करें df.reset_index()

यह जानने के लिए कि सूचकांक क्यों है और इसका उपयोग कैसे किया जाता है, उदाहरण के लिए पंडों को 10 मिनट देखें ।


1
धन्यवाद! मैंने सिर्फ पंडों का उपयोग न करके इसे अलग तरीके से आयात करने का फैसला किया। मुझे स्तंभों में से प्रत्येक पर कुछ अंकगणित करना है और अजगर पसंद नहीं था कि सूचकांक कॉलम संलग्न है। पंडों निश्चित रूप से डेटा आयात करने का सबसे आसान तरीका है लेकिन हमेशा सबसे अच्छा नहीं जो मुझे पता चला।
बोगडान जानिसजेवस्की

2
क्या आपने अंकगणित करने के लिए पंडों का उपयोग करने की कोशिश की?
जेमी बुल

1
क्या कोई इंडेक्स नाम हटा सकता है?
क्वांट

3
हाँ, index.name = None
दान एलन

1
@BogdanJaniszewski, अगर आपने पंडों का उपयोग नहीं किया, तो आपने इसे उत्तर के रूप में क्यों स्वीकार किया?
मल्टीगुडवर्स

249

अपने CSV फ़ाइल से पढ़ने के लिए और index=Falseउदाहरण के लिए तर्क को शामिल करें :

 df.to_csv(filename, index=False)

और सीएसवी से पढ़ने के लिए

df.read_csv(filename, index=False)  

यह समस्या को रोकना चाहिए ताकि आपको इसे बाद में ठीक करने की आवश्यकता न हो।


8
बहुत बहुत धन्यवाद। यह वही है जो सवाल देख रहा है।
पेल ब्लू डॉट

1
हेडर को हटाने के लिए "शीर्षलेख = गलत" काम करता है
जे। डहलग्रेन

29
होना चाहिए index_col=False
वेड्डा

1
उपयोग करना df.to_sql("table",cursor,if_exists="append",index=False)भी sqlite त्रुटि को ठीक करता हैsqlite3.OperationalError: table message has no column named index
अन्ना

1
@ देवदा यह ०.२३.४ में पांडा के index=Falseलिए to_excel()और इसके index_col=Falseसाथ लगता है read_csv()। : - /
मैट विल्की

70

df.reset_index(drop=True, inplace=True)


2
यह वास्तव में मेरा पसंदीदा समाधान है, लेकिन बहुत विस्तृत जवाब नहीं है। मैनुअल इस तर्क के बारे में पढ़ता है drop: "इंडेक्स को डेटाफ्रेम कॉलम में सम्मिलित करने का प्रयास न करें। यह इंडेक्स को डिफ़ॉल्ट पूर्णांक इंडेक्स में रीसेट करता है।" pandas.pydata.org/pandas-docs/stable/generated/…
tommy.carstensen

@ tommy.carstensen फिर आप सूचकांक पर पूर्णांक को पिछले सूचकांक के प्रतिस्थापन के रूप में लेने से कैसे बचेंगे? मुझे लगता है कि यह आपके लिंक के पाठ की गलतफहमी है। यहां सवाल इंडेक्स छोड़ने का है । और यह यहां तक ​​पहुंचा है। आप डिफ़ॉल्ट पूर्णांक प्राप्त करते हैं, क्योंकि कोई इंडेक्स के बिना कोई डेटफ़्रेम नहीं है, लेकिन आपने पिछले इंडेक्स को गिरा दिया है। इसीलिए इस उत्तर को स्वीकृत उत्तर होना चाहिए, यह भी क्योंकि यह स्मृति को कुशल बनाता है inplace=True
लोरेन्ज

13

यदि आप उदाहरण के लिए "आईडी" हैं, तो आप किसी एक कॉलम को एक इंडेक्स के रूप में सेट कर सकते हैं। इस स्थिति में सूचकांक कॉलम को आपके द्वारा चुने गए कॉलम में से एक से बदल दिया जाएगा।

df.set_index('id', inplace=True)

3

यदि आपकी समस्या मेरी जैसी ही है तो आप कॉलम हेडर को 0 से कॉलम आकार में रीसेट करना चाहते हैं। करना

df = pd.DataFrame(df.values);

संपादित करें:

यदि आपके पास विषम डेटा प्रकार हैं तो एक अच्छा विचार नहीं है। बेहतर बस का उपयोग करें

df.columns = range(len(df.columns))

2

यदि आप इस समस्या को हल नहीं करते हैं तो कृपया अपने डेटा का उदाहरण दें


2

एक चीज जो मैं करता हूं, df=df.reset_index() वह हैdf=df.drop(['index'],axis=1)


त्रुटि: "लेबल ['सूचकांक'] अक्ष में निहित नहीं है"
वासिन यूरी

@VasinYuriy इसका मतलब है df.reset_index().drop(columns=['yourfirstindex', 'yoursecondindex']), यह 'मानक' के साथ काम करता है केवल मानक मामले में कि सूचकांक का कोई नाम नहीं है और फिर 'सूचकांक' नामक एक स्तंभ बन जाता है df.reset_index().drop(columns=['index'])। जोड़ा गया पैरामीटर axis=1डिफ़ॉल्ट है। यह विधि अनुशंसित नहीं है, @ SubhojitMukherjee की reset_index(inplace=True)"inplace" का काम करता है और इस प्रकार यह मेमोरी को बचाता है।
लॉरेंज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.