পান্ডে একটি কলাম বাদে সমস্ত কলাম কীভাবে নির্বাচন করবেন?


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 - বর্তমানে তালিকাভুক্ত ডুপ্লিকেট লক্ষ্যটি সদৃশ নয়। মূল শিরোনাম সত্ত্বেও, লিঙ্কযুক্ত প্রশ্নটি "এই নির্দিষ্ট সিনট্যাক্সটি কেন কাজ করে না", অন্যদিকে এই প্রশ্নটি আরও সাধারণ "এটি করার সর্বোত্তম উপায় কী"। - এটির সাথে অন্য কলামগুলির মধ্যে সমস্ত কিছু না করে একটি নতুন ডেটা ফ্রেম তৈরি করে একটি বিদ্যমান ডেটা ফ্রেম থেকে একটি কলাম মুছার মধ্যে পার্থক্য যুক্ত করুন।
আরএম

@ আরএম আমি দুঃখিত, তবে আপনি এই পোস্টে শিরোনামে যে সম্পাদনা করেছেন তা আমি সম্মত নই, তাই আমি এটিকে আবার ঘুরিয়েছি। এটি সত্য যে ওপির উদ্দেশ্যটি সিনট্যাক্সকে প্রশ্ন করা ছিল, তবে পোস্টটি কলামটি কীভাবে মুছতে হবে তার আরও বিস্তৃত প্রশ্নটির দিকে মনোযোগ দিতে এসেছিল। এই পোস্টের উত্তরগুলি হ'ল সেখানে সর্বাধিক উত্সাহিত পোস্টের কার্বন কপি। ডুপ থাকে।
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করা ভাল আইএমও। কিছুটা আরও পঠনযোগ্য এবং মাল্টিইন্ডেক্সগুলি পরিচালনা করে
travc

5
আমি প্রকৃতপক্ষে সম্মত হই যে @ মাইকের ব্যবহারের সমাধানটি dropআরও ভাল - আমার মনে হয় যে এটি (একক স্তরের) কলামগুলি যে কাজগুলি করতে পারেন তার মধ্যে অ্যারে রয়েছে তবে এটি বিশেষভাবে একটি dropপাঠযোগ্য এবং জটিল সূচকগুলির সাথে খুব ভালভাবে কাজ করে তা আবিষ্কার করা দরকারী ।
মারিয়াস

1
এই গ্রেট উত্তরের জন্য আপনাকে ধন্যবাদ। আমার যদি একটি শিরোনাম না থাকে? আমি কীভাবে অ্যাড্রেস করব?
ফ্যাবিওস্পেগেইটি

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()স্থানটিতে কাজ করে না; অশুভ নাম সত্ত্বেও, 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)। আপনি একাধিক কলাম (তালিকা) চান বা একটি মাল্টিইন্ডেক্স (টিপল) উল্লেখ করে কিনা তা নির্ধারণ করতে তালিকায় বনাম টুপল ব্যবহার করা বলে মনে হচ্ছে।
travc

16
আরও পঠনযোগ্য: df.drop(columns='a')বা df.drop(columns=['a', 'b'])columns=সঙ্গে প্রতিস্থাপন করতে পারেন index=
বলপয়েন্টবেন

তবে আপনি যে সমস্ত কলামটি বাদ দিতে চান তার নাম না জানলে এটি কার্যকর হয় না।
yeliabsalohcin

যেহেতু এটি অনুলিপি তৈরি করেছে এবং ভিউ / রেফারেন্স নয়, আপনি কোনও অ্যাসাইনমেন্টের এলএইচএসে এটি ব্যবহার করে মূল ডেটাফ্রেমটি পরিবর্তন করতে পারবেন না।
জান ক্রিস্টোফ তেরেসা

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
@ নিশালএইচপি ডিএফ.পিড্রপ একাধিক কলাম ডিএফ.ড্রপ (['a', 'বি'], অক্ষ = 1) বাদ দিতে পারে
প্যাট্রিক লি

2
আমি মনে করি এটি লক্ষণীয় যে এটি আপনার কলামগুলি পুনরায়
সাজিয়ে তুলতে পারে

1
পছন্দ করুন আপনি 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

আমি মনে করি যে সবচেয়ে ভাল উপায়টি হল সালভাদোর ডালি দ্বারা উল্লিখিত উপায়। অন্যরা ভুল বলে নয়।

কারণ আপনার যখন কোনও ডেটা সেট থাকে যেখানে আপনি কেবল একটি কলাম নির্বাচন করতে চান এবং একটি ভেরিয়েবল এবং বাকী কলামগুলিকে অন্যটিতে তুলনা বা গণনার উদ্দেশ্যে রাখতে চান। তারপরে ডেটা সেটটির কলামটি ফেলে দেওয়া হয়ত সাহায্য করবে না। অবশ্যই এটির জন্য ব্যবহারের ক্ষেত্রেও রয়েছে।

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.