আমি বুঝতে পেরেছি যে আপনি কলাম কমানোর জন্য ডিএফ.ড্রপ ব্যবহার করতে পারেন ('কলামের নাম', অক্ষ = 1)। কলাম নামের পরিবর্তে সংখ্যাসূচক সূচক ব্যবহার করে কলামটি ফেলে দেওয়ার উপায় আছে?
আমি বুঝতে পেরেছি যে আপনি কলাম কমানোর জন্য ডিএফ.ড্রপ ব্যবহার করতে পারেন ('কলামের নাম', অক্ষ = 1)। কলাম নামের পরিবর্তে সংখ্যাসূচক সূচক ব্যবহার করে কলামটি ফেলে দেওয়ার উপায় আছে?
উত্তর:
আপনি সূচকগুলিতে কলামটি i
এভাবে মুছতে পারেন :
df.drop(df.columns[i], axis=1)
এটি অদ্ভুত কাজ করতে পারে, যদি আপনার কলামগুলিতে সদৃশ নাম থাকে তবে এটি করার জন্য আপনি কলামটি নতুন নাম দিয়ে মুছতে চান এমন নাম পরিবর্তন করতে পারেন। অথবা আপনি ডেটা ফ্রেমকে এভাবে পুনরায় নিয়োগ করতে পারেন:
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
আপনি দেখতে পাচ্ছেন, উভয় এক্স কলাম বাদ পড়েছে। বিকল্প সমাধান:
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 তম কলামটি সরিয়ে ফেলেছে (প্রথম 'এক্স')।
যদি একই নামের সাথে দুটি কলাম থাকে। একটি সহজ উপায় হ'ল ম্যানুয়ালি এইভাবে কলামগুলির নাম পরিবর্তন করা: -
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)