अजगर डेटाफ़्रेम पंडों int का उपयोग कर ड्रॉप कॉलम


154

मैं समझता हूं कि आप किसी कॉलम को df.drop ('कॉलम नाम', अक्ष = 1) का उपयोग करने के लिए छोड़ सकते हैं। क्या कॉलम नाम के बजाय संख्यात्मक सूचकांक का उपयोग करके एक कॉलम को छोड़ने का एक तरीका है?


मुझे लगता है कि यह यहाँ दिखाए गए कारणों के लिए काम नहीं करेगा: stackoverflow.com/questions/13411544/…
John

जवाबों:


167

आप iइस तरह सूचकांक पर कॉलम हटा सकते हैं :

df.drop(df.columns[i], axis=1)

यह अजीब काम कर सकता है, यदि आपके पास कॉलम में डुप्लिकेट नाम हैं, तो ऐसा करने के लिए आप उस कॉलम का नाम बदल सकते हैं जिसे आप नए नाम से कॉलम हटाना चाहते हैं। या आप इस तरह से DataFrame को पुन: असाइन कर सकते हैं:

df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]

4
मुझे लगता है कि आप बिंदु से चूक गए - वे सूचकांक द्वारा छोड़ना चाहते हैं, लेबल द्वारा नहीं। एक लेबल में अनुक्रमणिका को परिवर्तित करना केवल लेबल द्वारा गिराना है :(
डैरेन

कॉल को कैसे इंडेक्स किया जाए, अगर मुझे डेटा कॉलम के बीच में लगातार 100 कॉलम को छोड़ना है
साई किरण

112

इस तरह कई कॉलम ड्रॉप करें:

cols = [1,2,4,5,12]
df.drop(df.columns[cols],axis=1,inplace=True)

inplace=Trueडेटा फ़्रेम की प्रतिलिपि पर स्तंभ छोड़ने के बिना डेटाफ़्रेम में परिवर्तन करने के लिए उपयोग किया जाता है। यदि आपको अपना मूल बरकरार रखने की आवश्यकता है, तो उपयोग करें:

df_after_dropping = df.drop(df.columns[cols],axis=1)

3
क्या है इनकम तर्क?
15

12
यदि आप उपयोग नहीं करते हैं inplace=Trueतो आपको स्वयं df = df.drop()में परिवर्तन देखना चाहते हैं तो आपको करना होगा df
मूऑन

कॉल को इंडेक्स कैसे करें, अगर मुझे 100 कॉलम को छोड़ना है जो डेटा फ्रेम के बीच में निरंतर हैं।
साई किरण

36

यदि समान नामों वाले कई कॉलम हैं, तो अब तक दिए गए समाधान सभी कॉलमों को हटा देंगे, जो कि वह नहीं है जो कोई खोज रहा है। यह मामला हो सकता है यदि कोई एक उदाहरण को छोड़कर डुप्लिकेट कॉलम को हटाने का प्रयास कर रहा है। नीचे दिया गया उदाहरण इस स्थिति को स्पष्ट करता है:

# make a df with duplicate columns 'x'
df = pd.DataFrame({'x': range(5) , 'x':range(5), 'y':range(6, 11)}, columns = ['x', 'x', 'y']) 


df
Out[495]: 
   x  x   y
0  0  0   6
1  1  1   7
2  2  2   8
3  3  3   9
4  4  4  10

# attempting to drop the first column according to the solution offered so far     
df.drop(df.columns[0], axis = 1) 
   y
0  6
1  7
2  8
3  9
4  10

जैसा कि आप देख सकते हैं, दोनों Xs कॉलम गिरा दिए गए थे। दूसरा तरीका:

column_numbers = [x for x in range(df.shape[1])]  # list of columns' integer indices

column_numbers .remove(0) #removing column integer index 0
df.iloc[:, column_numbers] #return all columns except the 0th column

   x  y
0  0  6
1  1  7
2  2  8
3  3  9
4  4  10

जैसा कि आप देख सकते हैं, यह वास्तव में केवल 0 वां कॉलम (पहला 'x') हटा दिया है।


1
तुम मेरे नायक हो। बहुत लंबे समय से ऐसा करने के लिए एक चतुर तरीके से सोचने की कोशिश कर रहा था।
ATK7474

5

आपको डेटाफ़्रेम में उनकी स्थिति के आधार पर कॉलम की पहचान करने की आवश्यकता है। उदाहरण के लिए, यदि आप (डेल) कॉलम संख्या 2,3 और 5 को छोड़ना चाहते हैं, तो यह होगा,

df.drop(df.columns[[2,3,5]], axis = 1)

4

यदि आपके पास एक ही नाम के दो कॉलम हैं। एक सरल तरीका यह है कि कॉलम को मैन्युअल रूप से इस तरह बदला जाए: -

df.columns = ['column1', 'column2', 'column3']

फिर आप अपने अनुरोध के अनुसार कॉलम इंडेक्स के माध्यम से छोड़ सकते हैं: -

df.drop(df.columns[1], axis=1, inplace=True)

df.column[1] सूचकांक छोड़ देंगे 1।

अक्ष 1 = कॉलम और अक्ष 0 = पंक्तियाँ याद रखें।


3

यदि आप वास्तव में इसे पूर्णांक (लेकिन क्यों?) के साथ करना चाहते हैं, तो आप एक शब्दकोश का निर्माण कर सकते हैं।

col_dict = {x: col for x, col in enumerate(df.columns)}

फिर df = df.drop(col_dict[0], 1)वांछित के रूप में काम करेगा

संपादित करें: आप इसे एक फ़ंक्शन में रख सकते हैं जो आपके लिए ऐसा करता है, हालांकि इस तरह से यह हर बार जब आप इसे कहते हैं तो शब्दकोश बनाता है

def drop_col_n(df, col_n_to_drop):
    col_dict = {x: col for x, col in enumerate(df.columns)}
    return df.drop(col_dict[col_n_to_drop], 1)

df = drop_col_n(df, 2)

1

आप पहले दो कॉलम (या किसी ऐसे कॉलम की ज़रूरत नहीं है) को छोड़ने के लिए निम्नलिखित पंक्ति का उपयोग कर सकते हैं:

df.drop([df.columns[0], df.columns[1]], axis=1)

संदर्भ


-1

चूंकि एक ही नाम के साथ कई कॉलम हो सकते हैं, इसलिए हमें पहले कॉलम का नाम बदलना चाहिए। यहाँ समाधान के लिए कोड है।

df.columns=list(range(0,len(df.columns)))
df.drop(columns=[1,2])#drop second and third columns
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.