दिलचस्प पोस्ट
मेटाडेटा पुनर्प्राप्त करने में असमर्थ क्यों <center> टैग HTML में बहिष्कृत है? .NET ObservableDictionary चयन तत्व पर IE6 / IE7 सीएसएस सीमा स्विफ्ट – संग्रहीत मान ऑर्डर पूरी तरह से शब्दकोश में बदल दिया गया है कीस्टोर, प्रमाण पत्र और उपनाम को समझना Monomorphism प्रतिबंध क्या है? PHP में डायरेक्टरी ट्रैवर्सल को रोकना लेकिन पथ को अनुमति देना यदि इनपुट टैग का कोई नाम नहीं है, तो फॉर्म डेटा अभी भी स्थानांतरित हो जाता है? जावा में बहु-आयामी सरणी को गतिशील रूप से बनाना संभव है? ओरेकल में तालिका से डुप्लिकेट पंक्तियां निकालना जावास्क्रिप्ट को नाम से तत्व मिलता है यह जावास्क्रिप्ट पैटर्न क्या है और इसका इस्तेमाल क्यों किया जाता है? एंड्रॉइड: मैं अपने एप से एक और ऐप कैसे खोलूं? MySQLdb का उपयोग करते हुए कर्सर को बंद करने के लिए

पांडा डेटाफ्रेम में कॉलम का चयन करना

मेरे पास अलग-अलग कॉलम में डेटा है लेकिन मुझे नहीं पता कि इसे किसी अन्य चर में सहेजने के लिए कैसे निकालना है।

index abc 1 2 3 4 2 3 4 5 

मैं 'b' , 'c' चयन कैसे करूँ और उसे डीएफ 1 में सहेजूं?

मैंने कोशिश की

 df1 = df['a':'b'] df1 = df.ix[:, 'a':'b'] 

कोई भी काम करने लगते हैं कोई भी विचार धन्यवाद में मदद करेगा

वेब के समाधान से एकत्रित समाधान "पांडा डेटाफ्रेम में कॉलम का चयन करना"

स्तंभ नाम (जो स्ट्रिंग हैं) को आपके द्वारा किए गए तरीके से कटा नहीं किया जा सकता है

यहां आपके पास कुछ विकल्प हैं यदि आप संदर्भ से जानते हैं कि आप किस चर को टुकड़ा करना चाहते हैं, तो आप __getitem__ वाक्यविन्यास ([] के) में एक सूची के पास केवल उन कॉलमों का एक दृश्य वापस कर सकते हैं।

 df1 = df[['a','b']] 

वैकल्पिक रूप से, यदि यह उनके सूचकांक से संख्यात्मक रूप से मायने रखता है और उनके नाम से नहीं कहता है (कहें कि आपका कोड स्वतः पहले दो स्तंभों के नामों को जानने के बिना ऐसा करना चाहिए) तो आप इसे इसके बजाय कर सकते हैं:

 df1 = df.iloc[:,0:2] # Remember that Python does not slice inclusive of the ending index. 

इसके अतिरिक्त, आप अपने आप को पांडस ऑब्जेक्ट में एक दृश्य के विचार के साथ परिचित होना चाहिए। उस वस्तु की एक प्रति। उपरोक्त तरीकों में से पहला वांछित उप-वस्तु (वांछित स्लाइस) की याद में एक नई प्रति देगा।

कभी-कभी, पांडों में ऐसे इंडेक्सिंग सम्मेलनों होते हैं जो ऐसा नहीं करते हैं और बदले में आपको एक नया वेरिएबल प्रदान करते हैं जो केवल मूल वस्तु के उप-ऑब्जेक्ट या स्लाइस के रूप में मेमोरी के एक ही भाग को संदर्भित करता है। यह अनुक्रमण के दूसरे तरीके से होगा, ताकि आप उसे नियमित प्रति प्राप्त करने के लिए copy() फ़ंक्शन के साथ संशोधित कर सकें। जब ऐसा होता है, तो आप जो सोचते हैं उसे बदलकर कटा हुआ वस्तु कभी-कभी मूल वस्तु को बदल सकती है। इस के लिए बाहर देखो पर हमेशा अच्छा है

 df1 = df.iloc[0,0:2].copy() # To avoid the case where changing df1 also changes df 

अपने कॉलम नामों ( df.columns ) को मानते हुए ['index','a','b','c'] , तो आप चाहते हैं कि डेटा 3 व 4 स्तंभों में है यदि आप अपनी स्क्रिप्ट चलाते समय उनके नाम नहीं जानते हैं, तो आप ऐसा कर सकते हैं

 newdf = df[df.columns[2:4]] # Remember, Python is 0-offset! The "3rd" entry is at slot 2. 

जैसा कि ईएमएस अपने जवाब में df.ix , df.ix स्लाइस थोड़े अधिक संक्षेप में कॉलम करते हैं, लेकिन। .columns इंटरफ़ेस अधिक प्राकृतिक हो सकता है क्योंकि यह वेनिला 1-डी अजगर सूची अनुक्रमण / स्लिसिंग वाक्यविन्यास का उपयोग करता है।

चेतावनी: 'index' DataFrame कॉलम के लिए एक खराब नाम है। उस समान लेबल का इस्तेमाल वास्तविक df.index विशेषता, एक Index सरणी के लिए भी किया जाता है। इसलिए आपका कॉलम df['index'] द्वारा वापस किया गया है और वास्तविक डाटाफ्रेम इंडेक्स df.index द्वारा वापस आ गया है। एक Index एक विशेष प्रकार की Series जिसे उसके तत्वों के मूल्यों को देखने के लिए अनुकूलित किया गया है। Df.index के लिए यह उनके लेबल द्वारा पंक्तियों को देखने के लिए है। वह df.columns विशेषता भी एक pd.Index array है, उनके लेबल द्वारा कॉलम देखने के लिए।

 In [39]: df Out[39]: index abc 0 1 2 3 4 1 2 3 4 5 In [40]: df1 = df[['b', 'c']] In [41]: df1 Out[41]: bc 0 3 4 1 4 5 

संस्करण 0.11.0 के अनुसार, स्तंभों को आप जिस तरीके से .loc indexer का उपयोग करने की कोशिश में कटा हुआ किया जा सकता है :

 df.loc[:, 'C':'E'] 

E माध्यम से कॉलम C रिटर्न


बेतरतीब ढंग से उत्पन्न डेटाफ्रेम पर एक डेमो:

 import pandas as pd import numpy as np np.random.seed(5) df = pd.DataFrame(np.random.randint(100, size=(100, 6)), columns=list('ABCDEF'), index=['R{}'.format(i) for i in range(100)]) df.head() Out: ABCDEF R0 99 78 61 16 73 8 R1 62 27 30 80 7 76 R2 15 53 80 27 44 77 R3 75 65 47 30 84 86 R4 18 9 41 62 1 82 

सी से ई कॉलम प्राप्त करने के लिए (ध्यान दें कि पूर्णांक टुकड़ा करने की क्रिया के विपरीत, 'ई' स्तंभों में शामिल है):

 df.loc[:, 'C':'E'] Out: CDE R0 61 16 73 R1 30 80 7 R2 80 27 44 R3 47 30 84 R4 41 62 1 R5 5 58 0 ... 

लेबल के आधार पर पंक्तियों का चयन करने के लिए समान कार्य। उन कॉलम से 'R10' को 'R10' की पंक्तियां प्राप्त करें:

 df.loc['R6':'R10', 'C':'E'] Out: CDE R6 51 27 31 R7 83 19 18 R8 11 67 65 R9 78 27 29 R10 7 16 94 

.loc एक बूलियन .loc भी स्वीकार करता है ताकि आप कॉलम का चयन कर सकें, जिनके संबंधित .loc सरणी .loc उदाहरण के लिए, df.columns.isin(list('BCD')) array([False, True, True, True, False, False], dtype=bool) देता है array([False, True, True, True, False, False], dtype=bool) – यदि कॉलम का नाम सूची में है तो सही है ['B', 'C', 'D'] ; झूठी, अन्यथा

 df.loc[:, df.columns.isin(list('BCD'))] Out: BCD R0 78 61 16 R1 27 30 80 R2 53 80 27 R3 65 47 30 R4 9 41 62 R5 78 5 58 ... 

मुझे पता है कि यह सवाल काफी पुराना है, लेकिन पंडों के नवीनतम संस्करण में ऐसा करने का एक आसान तरीका है। स्तंभ नाम (जो स्ट्रिंग हैं) को आप जितनी भी पसंद करेंगे, उतनी कटाई कर सकते हैं।

 columns = ['b', 'c'] df1 = pd.DataFrame(df, columns=columns) 

आप ड्रॉप किए जाने वाले स्तंभों की एक सूची प्रदान कर सकते हैं और केवल पेंडस डेटाफ्रेम पर drop() फ़ंक्शन का उपयोग करने के लिए आवश्यक कॉलम के साथ डेटाफ़्रेम वापस लौट सकते हैं।

बस केह रहा हू

 colsToDrop = ['a'] df.drop(colsToDrop, axis=1) 

केवल कॉलम b और c साथ एक डेटाफ़्रेम वापस आएगा

drop पद्धति यहाँ प्रलेखित है ।

मुझे यह विधि बहुत उपयोगी साबित हुई:

iloc [पंक्ति टुकड़ा करने की क्रिया, स्तंभ टुकड़ा करने की क्रिया]

surveys_df.iloc [0: 3, 1: 4]

अधिक जानकारी यहां पाई जा सकती है

बस का प्रयोग करें: यह बी और सी कॉलम का चयन करेगा।

 df1=pd.DataFrame() df1=df[['b','c']] 

तो आप बस df1 कॉल कर सकते हैं:

 df1