मैं समझता हूं कि आप किसी कॉलम को df.drop ('कॉलम नाम', अक्ष = 1) का उपयोग करने के लिए छोड़ सकते हैं। क्या कॉलम नाम के बजाय संख्यात्मक सूचकांक का उपयोग करके एक कॉलम को छोड़ने का एक तरीका है?
मैं समझता हूं कि आप किसी कॉलम को df.drop ('कॉलम नाम', अक्ष = 1) का उपयोग करने के लिए छोड़ सकते हैं। क्या कॉलम नाम के बजाय संख्यात्मक सूचकांक का उपयोग करके एक कॉलम को छोड़ने का एक तरीका है?
जवाबों:
आप i
इस तरह सूचकांक पर कॉलम हटा सकते हैं :
df.drop(df.columns[i], axis=1)
यह अजीब काम कर सकता है, यदि आपके पास कॉलम में डुप्लिकेट नाम हैं, तो ऐसा करने के लिए आप उस कॉलम का नाम बदल सकते हैं जिसे आप नए नाम से कॉलम हटाना चाहते हैं। या आप इस तरह से DataFrame को पुन: असाइन कर सकते हैं:
df = df.iloc[:, [j for j, c in enumerate(df.columns) if j != i]]
इस तरह कई कॉलम ड्रॉप करें:
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)
inplace=True
तो आपको स्वयं df = df.drop()
में परिवर्तन देखना चाहते हैं तो आपको करना होगा df
।
यदि समान नामों वाले कई कॉलम हैं, तो अब तक दिए गए समाधान सभी कॉलमों को हटा देंगे, जो कि वह नहीं है जो कोई खोज रहा है। यह मामला हो सकता है यदि कोई एक उदाहरण को छोड़कर डुप्लिकेट कॉलम को हटाने का प्रयास कर रहा है। नीचे दिया गया उदाहरण इस स्थिति को स्पष्ट करता है:
# 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') हटा दिया है।
यदि आपके पास एक ही नाम के दो कॉलम हैं। एक सरल तरीका यह है कि कॉलम को मैन्युअल रूप से इस तरह बदला जाए: -
df.columns = ['column1', 'column2', 'column3']
फिर आप अपने अनुरोध के अनुसार कॉलम इंडेक्स के माध्यम से छोड़ सकते हैं: -
df.drop(df.columns[1], axis=1, inplace=True)
df.column[1]
सूचकांक छोड़ देंगे 1।
अक्ष 1 = कॉलम और अक्ष 0 = पंक्तियाँ याद रखें।
यदि आप वास्तव में इसे पूर्णांक (लेकिन क्यों?) के साथ करना चाहते हैं, तो आप एक शब्दकोश का निर्माण कर सकते हैं।
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)
आप पहले दो कॉलम (या किसी ऐसे कॉलम की ज़रूरत नहीं है) को छोड़ने के लिए निम्नलिखित पंक्ति का उपयोग कर सकते हैं:
df.drop([df.columns[0], df.columns[1]], axis=1)