ইথ ব্যবহার করে পাইথন ডেটাফ্রেম পান্ডাস ড্রপ কলাম


154

আমি বুঝতে পেরেছি যে আপনি কলাম কমানোর জন্য ডিএফ.ড্রপ ব্যবহার করতে পারেন ('কলামের নাম', অক্ষ = 1)। কলাম নামের পরিবর্তে সংখ্যাসূচক সূচক ব্যবহার করে কলামটি ফেলে দেওয়ার উপায় আছে?


আমি এখানে দেখানো কারণগুলির জন্য এটি কাজ করবে না বলে মনে করি: স্ট্যাকওভারফ্লো
জন

উত্তর:


167

আপনি সূচকগুলিতে কলামটি iএভাবে মুছতে পারেন :

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

এটি অদ্ভুত কাজ করতে পারে, যদি আপনার কলামগুলিতে সদৃশ নাম থাকে তবে এটি করার জন্য আপনি কলামটি নতুন নাম দিয়ে মুছতে চান এমন নাম পরিবর্তন করতে পারেন। অথবা আপনি ডেটা ফ্রেমকে এভাবে পুনরায় নিয়োগ করতে পারেন:

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
কি জন্য অন্তর্নিহিত যুক্তি?
সিডপত

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

আপনি দেখতে পাচ্ছেন, উভয় এক্স কলাম বাদ পড়েছে। বিকল্প সমাধান:

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 তম কলামটি সরিয়ে ফেলেছে (প্রথম 'এক্স')।


1
আপনি আমার নায়ক. খুব দীর্ঘ পথ ধরে এটি করার জন্য একটি চতুর উপায় সম্পর্কে ভাবার চেষ্টা করছিল।
74৪74৪

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