पांडा में एक कॉलम को छोड़कर सभी कॉलम का चयन कैसे करें?


278

मेरा डेटाफ़्रेम इस तरह है:

import pandas
import numpy as np
df = DataFrame(np.random.rand(4,4), columns = list('abcd'))
df
      a         b         c         d
0  0.418762  0.042369  0.869203  0.972314
1  0.991058  0.510228  0.594784  0.534366
2  0.407472  0.259811  0.396664  0.894202
3  0.726168  0.139531  0.324932  0.906575

मुझे छोड़कर सभी कॉलम कैसे मिल सकते हैं column b?


@ सीएस 95 - वर्तमान में सूचीबद्ध डुप्लिकेट लक्ष्य एक डुप्लिकेट नहीं है। मूल शीर्षक के बावजूद, जुड़ा हुआ प्रश्न "यह विशिष्ट वाक्यविन्यास क्यों नहीं है", जबकि यह प्रश्न अधिक सामान्य है "यह करने का सबसे अच्छा तरीका क्या है"। - इसमें मौजूदा DataFrame बनाम एक कॉलम को हटाने के बीच का अंतर जोड़ें। एक नए DataFrame को बनाने के साथ-साथ दूसरे के कॉलम के साथ।
आरएम

@ मुझे खेद है, लेकिन मैं उस पोस्ट पर आपके द्वारा किए गए संपादन से सहमत नहीं हूं, इसलिए मैंने इसे वापस ले लिया है। यह सही है कि ओपी का इरादा वाक्यविन्यास पर सवाल उठाना था, लेकिन पोस्ट एक कॉलम को हटाने के अधिक व्यापक प्रश्न को संबोधित करने के लिए बढ़ी है। इस पोस्ट के उत्तर वहां की उच्चतम उत्कीर्ण पोस्ट की कार्बन प्रतियां हैं। डुबकी लगाता रहता है।
CS95

ध्यान दें इस सवाल पर मेटा पर चर्चा की जा रही है ।
विधर्मी बंदर

जवाबों:


421

जब कॉलम मल्टीएंडेक्स नहीं होते हैं, df.columnsतो कॉलम नामों का एक सरणी होता है, ताकि आप कर सकें:

df.loc[:, df.columns != 'b']

          a         c         d
0  0.561196  0.013768  0.772827
1  0.882641  0.615396  0.075381
2  0.368824  0.651378  0.397203
3  0.788730  0.568099  0.869127

13
बुरा नहीं है, लेकिन @ माइक का उपयोग dropबेहतर आईएमओ है। थोड़ा अधिक पठनीय और मल्टीएन्डेक्स को संभालता है
ट्रेक

5
मैं वास्तव में सहमत हूं कि @ माइक का उपयोग dropबेहतर है - मुझे लगता है कि यह पता लगाना उपयोगी है कि (एकल-स्तरीय) कॉलम एरे हैं जिनके साथ आप काम कर सकते हैं, लेकिन विशेष रूप से एक कॉलम को छोड़ने के लिए, dropबहुत पठनीय है और जटिल अनुक्रमित के साथ अच्छी तरह से काम करता है।
मारीस

1
इस महान जवाब के लिए धन्यवाद। क्या होगा अगर मेरे पास हेडर नहीं है? मैं कैसे मानता हूँ?
FabioSpaghetti

1
जब आपके पास 1 से अधिक स्तंभों को अनदेखा करने के बारे में क्या हो?
ब्रूनो अम्ब्रोज़ियो

227

उपयोग न करें ix। यह पदावनत है । ऐसा करने का सबसे पठनीय और मुहावरेदार तरीका है df.drop():

>>> df

          a         b         c         d
0  0.175127  0.191051  0.382122  0.869242
1  0.414376  0.300502  0.554819  0.497524
2  0.142878  0.406830  0.314240  0.093132
3  0.337368  0.851783  0.933441  0.949598

>>> df.drop('b', axis=1)

          a         c         d
0  0.175127  0.382122  0.869242
1  0.414376  0.554819  0.497524
2  0.142878  0.314240  0.093132
3  0.337368  0.933441  0.949598

ध्यान दें कि डिफ़ॉल्ट रूप से, .drop()inplace को ऑपरेट नहीं करता है; अशुभ नाम के बावजूद, dfइस प्रक्रिया से अप्रभावित है। आप स्थायी रूप से निकालना चाहते हैं bसे df, कर df.drop('b', inplace=True)

df.drop()लेबल की एक सूची भी स्वीकार करता है, जैसे df.drop(['a', 'b'], axis=1)स्तंभ छोड़ देगा aऔर b


1
इसके अलावा एक बहु बिंदु पर काम करता है जैसे आप इसे करने की उम्मीद करेंगे। df.drop([('l1name', 'l2name'), 'anotherl1name'], axis=1)। यदि आप एकाधिक कॉलम (सूची) चाहते हैं या मल्टीइन्डेक्स (टुपल) का जिक्र करना चाहते हैं, तो यह निर्धारित करने के लिए सूची बनाम ट्यूपल का उपयोग करने लगता है।
ट्रेक

16
अधिक पठनीय: df.drop(columns='a')या df.drop(columns=['a', 'b'])। के columns=साथ भी बदल सकते हैं index=
बॉलपॉइंटबैन

हालाँकि यह उपयोगी नहीं है यदि आप उन सभी स्तंभों के नाम नहीं जानते हैं जिन्हें आप छोड़ना चाहते हैं।
येलिबसालोहसिन

चूंकि यह प्रतिलिपि बनाता है और दृश्य / संदर्भ नहीं, आप असाइनमेंट के LHS पर इसका उपयोग करके मूल डेटाफ़्रेम को संशोधित नहीं कर सकते।
जन क्रिस्टोफ़ तेरसा

132
df[df.columns.difference(['b'])]

Out: 
          a         c         d
0  0.427809  0.459807  0.333869
1  0.678031  0.668346  0.645951
2  0.996573  0.673730  0.314911
3  0.786942  0.719665  0.330833

9
मुझे यह दृष्टिकोण पसंद है क्योंकि इसका उपयोग एक से अधिक कॉलम को छोड़ने के लिए किया जा सकता है।
निश्चल एचपी

3
@NischalHp df.drop भी एक से अधिक कॉलम df.drop (['a', 'b'], धुरी = 1) को छोड़ सकती है
पैट्रिक ली

2
मुझे लगता है कि यह ध्यान देने योग्य है कि यह आपके कॉलम को फिर से व्यवस्थित कर सकता है
oc800

1
@ Ocean800 हाँ यह सच है। sort=Falseयदि आप उस व्यवहार से बचना चाहते हैं तो आप पास कर सकते हैं ( df.columns.difference(['b'], sort=False))
ayhan

64

आप उपयोग कर सकते हैं df.columns.isin()

df.loc[:, ~df.columns.isin(['b'])]

जब आप कई स्तंभों को छोड़ना चाहते हैं, जैसे कि सरल:

df.loc[:, ~df.columns.isin(['col1', 'col2'])]

12

यहाँ एक और तरीका है:

df[[i for i in list(df.columns) if i != '<your column>']]

आप केवल उन सभी कॉलमों को पास करते हैं, जिन्हें आप नहीं चाहते हैं सिवाय दिखाए जाने के।


5

@ साल्वाडोर डाली के लिए एक और मामूली संशोधन स्तंभों की एक सूची को बाहर करने में सक्षम बनाता है:

df[[i for i in list(df.columns) if i not in [list_of_columns_to_exclude]]]

या

df.loc[:,[i for i in list(df.columns) if i not in [list_of_columns_to_exclude]]]

4

मुझे लगता है कि करने का सबसे अच्छा तरीका @Salvador Dali द्वारा उल्लिखित तरीका है। ऐसा नहीं कि बाकी लोग गलत हैं।

क्योंकि जब आपके पास एक डेटा सेट होता है, जहाँ आप केवल एक कॉलम का चयन करना चाहते हैं और इसे एक चर में और बाकी कॉलम को तुलना या कम्प्यूटेशनल उद्देश्यों के लिए दूसरे में डालते हैं। फिर डेटा सेट के कॉलम को छोड़ने से मदद नहीं मिल सकती है। बेशक वहाँ के लिए उपयोग मामलों के रूप में अच्छी तरह से कर रहे हैं।

x_cols = [x for x in data.columns if x != 'name of column to be excluded']

फिर आप उन स्तंभों के संग्रह x_colsको अन्य संगणक की तरह दूसरे चर में डाल सकते हैं x_cols1

ex: x_cols1 = data[x_cols]

क्या आप बता सकते हैं कि सल्वाडोर के उत्तर की टिप्पणी / विस्तार के बजाय यह एक अलग उत्तर क्यों है?

3

यहाँ एक लाइन लंबा है:

df[map(lambda x :x not in ['b'], list(df.columns))]

पहले :

import pandas
import numpy as np
df = pd.DataFrame(np.random.rand(4,4), columns = list('abcd'))
df

       a           b           c           d
0   0.774951    0.079351    0.118437    0.735799
1   0.615547    0.203062    0.437672    0.912781
2   0.804140    0.708514    0.156943    0.104416
3   0.226051    0.641862    0.739839    0.434230

के बाद :

df[map(lambda x :x not in ['b'], list(df.columns))]

        a          c          d
0   0.774951    0.118437    0.735799
1   0.615547    0.437672    0.912781
2   0.804140    0.156943    0.104416
3   0.226051    0.739839    0.434230
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.