পান্ডাস ডেটা ফ্রেম থেকে কলাম মুছুন


1320

আমি ডেটা ফ্রেমের কলামটি মুছার সময় ব্যবহার করি:

del df['column_name']

এবং এটি দুর্দান্ত কাজ করে। আমি নিম্নলিখিতগুলি কেন ব্যবহার করতে পারি না?

del df.column_name

যেহেতু কলাম / সিরিজ হিসাবে এটি অ্যাক্সেস করা সম্ভব df.column_name, আমি এটি কাজ করবে বলে আশা করি।


2
নোট এই প্রশ্নটি মেটা নিয়ে আলোচনা করা হচ্ছে ।
আরএম

উত্তর:


853

আপনি যেমন অনুমান করেছেন ঠিক তেমন সিনট্যাক্স

del df['column_name']

এটা তোলে করতে কঠিন del df.column_nameকেবল পাইথন মধ্যে অন্বিত সীমাবদ্ধতার ফলে হবে। পাইথনের কভারগুলির আওতায় del df[name]অনুবাদ হয় df.__delitem__(name)


25
আমি বুঝতে পারি এটি একটি অতি পুরানো "উত্তর", তবে আমার কৌতূহল শঙ্কিত - এটি পাইথনের সিন্টেক্সিক সীমাবদ্ধতা কেন ? class A(object): def __init__(self): self.var = 1একটি ক্লাস সেট আপ করে, তারপর a = A(); del a.varঠিক কাজ করে ...
ওয়ান্ডারসন

13
@ ডোয়ান্ডারসন পার্থক্যটি হ'ল যখন কোনও কলামটি সরিয়ে ফেলা হবে, "কীভাবে এটি করবেন" এর জন্য ডেটাফ্রেমের নিজস্ব হ্যান্ডলিং থাকা দরকার। এর ক্ষেত্রে del df[name]এটি অনুবাদ করা হয় df.__delitem__(name)যা এমন একটি পদ্ধতি যা ডেটাফ্রেম তার প্রয়োজনগুলিকে বাস্তবায়ন করতে এবং সংশোধন করতে পারে। ক্ষেত্রে del df.name, সদস্য পরিবর্তনশীল কোনো কাস্টম কোড চলমান জন্য একটি সুযোগ ছাড়া সরানো হবে। আপনার নিজের উদাহরণ বিবেচনা করুন - আপনি del a.var"মুছে ফেলা ভেরিয়েবল" মুদ্রণের ফলাফল পেতে পারেন ? আপনি যদি পারেন, কিভাবে আমাকে বলুন। আমি পারব না :)
ইয়োনাতান

8
@ ইয়োনাতান আপনি ডকস.পিথন.আর.ইথথন.আর / 3 / রেফারেন্স / ডাডামোডেল। Html#object.__ delattr__ বা এর জন্য বর্ণনাকারী ব্যবহার করতে পারেন : ডকস.পিথন.আর.৩
ইউজিন

5
@ ইয়োনাতান ইউজিনের মন্তব্য পাইথন 2-তেও প্রযোজ্য; বর্ণনাকারীরা পাইথন ২-তে ২.২ থেকে রয়েছেন এবং এটি আপনার প্রয়োজন মেটাতে তুচ্ছ;)
সিএস

1
এই উত্তরটি সত্যই সঠিক নয় - pandasবিকাশকারীরা করেন নি , তবে এর অর্থ এটি করা শক্ত নয়।
wizzwizz4

2178

পান্ডায় এটি করার সর্বোত্তম উপায়টি হ'ল ব্যবহার করা drop :

df = df.drop('column_name', 1)

কোথায় 1 হয় অক্ষ নম্বর ( 0সারি এবং 1কলামের জন্য।)

পুনরায় স্বাক্ষর dfনা করেই কলামটি মুছতে আপনি করতে পারেন:

df.drop('column_name', axis=1, inplace=True)

পরিশেষে, কলামের পরিবর্তে কলাম নম্বর দ্বারা বাদ দেওয়া লেবেলের থেকে নামার জন্য, মুছে ফেলার জন্য এটি চেষ্টা করুন, যেমন প্রথম, দ্বিতীয় এবং চতুর্থ কলামগুলি:

df = df.drop(df.columns[[0, 1, 3]], axis=1)  # df.columns is zero-based pd.Index 

কলামগুলির জন্য "পাঠ্য" সিনট্যাক্সের সাথেও কাজ করছে:

df.drop(['column_nameA', 'column_nameB'], axis=1, inplace=True)

79
এটি delকোনও কারণে সুপারিশ করা হয় ?
দাড়ি

20
যদিও মোছার এই পদ্ধতিটির গুণাবলী রয়েছে, এই উত্তরটি আসলে জিজ্ঞাসিত প্রশ্নের উত্তর দেয় না।
পল

108
সত্য @ পল, তবে প্রশ্নের শিরোনামের কারণে, এখানে পৌঁছে যাওয়া বেশিরভাগ লোকেরা কীভাবে কলামটি মুছবেন তা চেষ্টা করার মাধ্যমে তা করবেন।
লন্ডনরব

24
@beardc আরেকটি সুবিধা dropধরে delযে dropআপনি কার্য সম্পাদন, একযোগে একাধিক কলাম ড্রপ অপারেশন inplace বা না, এবং (বিশেষত বা 3-ডি ম্যাট্রিক্স জন্য দরকারী কোন অক্ষ বরাবর মুছে রেকর্ড পারবেন Panel)
hobs

8
dropওভারের আরেকটি সুবিধা delহ'ল ড্রপটি পান্ডাস এপিআইয়ের অংশ এবং এতে ডকুমেন্টেশন রয়েছে।
modulitos

240

ব্যবহার করুন:

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

এটি জায়গায় এক বা একাধিক কলাম মুছে ফেলবে। নোট যা inplace=Trueপান্ডাস v0.13 এ যুক্ত হয়েছিল এবং পুরানো সংস্করণগুলিতে কাজ করবে না। সেক্ষেত্রে আপনাকে ফলাফলটি পুনরায় নির্ধারণ করতে হবে:

df = df.drop(columns, axis=1)

3
এই উত্তর সম্পর্কে একটি নোট: যদি একটি 'তালিকা' ব্যবহার করা হয় তবে বর্গাকার বন্ধনীগুলি ফেলে দেওয়া উচিত:df.drop(list,inplace=True,axis=1)
এডেজ

1
এটি সত্যই গ্রহণযোগ্য উত্তর হওয়া উচিত, কারণ এটি এই পদ্ধতির শ্রেষ্ঠত্বকে পরিষ্কার করে দেয় del- একবারে একাধিক কলাম ড্রপ করতে পারে।
dbliss

110

সূচকে বাদ দিন

প্রথম, দ্বিতীয় এবং চতুর্থ কলাম মুছুন:

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

প্রথম কলামটি মুছুন:

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

Anচ্ছিক প্যারামিটার রয়েছে inplace যাতে অনুলিপি তৈরি না করে মূল ডেটাটি পরিবর্তন করা যায়।

popped

কলাম নির্বাচন, সংযোজন, মোছা

কলাম মুছুন column-name:

df.pop('column-name')

উদাহরণ:

df = DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6]), ('C', [7,8, 9])], orient='index', columns=['one', 'two', 'three'])

print df:

   one  two  three
A    1    2      3
B    4    5      6
C    7    8      9

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

   two  three
A    2      3
B    5      6
C    8      9

three = df.pop('three') print df:

   two
A    2
B    5
C    8

1
আমি কীভাবে পান্ডায় একটি সারি পপ করতে পারি?
কেনেট সেলসেটি

2
@ ইউগি আপনি তার জন্য একটি ট্রান্সপোজড ডেটা ফ্রেম ব্যবহার করতে পারেন। প্রাক্তন - df.T.pop('A')
ক্লক স্লেভ

@ ক্লকস্লেভ যা আসলটি পরিবর্তন করে না df। আপনি করতে পারেন df = df.T; df.pop(index); df = df.Tতবে এটি অত্যধিক বলে মনে হচ্ছে।
CS95

পরিবর্তে df.drop(df.columns[[0]], axis=1, inplace=True)এটি ব্যবহারের যথেষ্ট হবে না df.drop([0], axis=1)?
অনির্বাণ মুখোপাধ্যায়

1
@ অ্যানিরবান মুখার্জি এটি নির্ভর করে। যদি কলামের নাম মুছতে চান 0তবে df.drop(0, axis=1)ভাল কাজ করছেন। তবে যদি কলামের নাম না জানা থাকে এবং প্রথম কলামটি সরিয়ে ফেলতে হয় তবে df.drop(df.columns[[0]], axis=1, inplace=True)এটি প্রয়োজন হয় , এটি অবস্থান অনুসারে প্রথম কলামটি নির্বাচন করে এটি ফেলে দেয়।
jezrael

71

প্রকৃত প্রশ্ন উত্থাপিত, এখানে বেশিরভাগ উত্তর দ্বারা মিস করা হয়:

আমি কেন ব্যবহার করতে পারি না del df.column_name?

প্রথমে আমাদের সমস্যাটি বুঝতে হবে, যার জন্য আমাদের পাইথন ম্যাজিক পদ্ধতিতে ডুব দেওয়া দরকার ।

ওয়েস তার উত্তর del df['column']মানচিত্রে অজগর যাদু পদ্ধতিতে নির্দেশ করেছেন df.__delitem__('column') যা কলামটি ফেলে দেওয়ার জন্য পান্ডাসে প্রয়োগ করা হয়েছে

তবে পাইথন ম্যাজিক পদ্ধতি সম্পর্কে উপরের লিঙ্কে উল্লেখ করা হয়েছে :

প্রকৃতপক্ষে, __del__অনিশ্চিত পরিস্থিতিতে যেহেতু এটি বলা হয় , প্রায়শই ব্যবহার করা উচিত নয়; সাবধানতার সাথে এটি ব্যবহার করুন!

আপনি তর্ক করতে পারেন যে del df['column_name']ব্যবহার বা উত্সাহিত করা del df.column_nameউচিত নয় এবং এর মাধ্যমে এমনকি বিবেচনা করা উচিত নয়।

তবে তাত্ত্বিকভাবে, ম্যাজিক পদ্ধতিটিdel df.column_name ব্যবহার করে__delattr__ পান্ডায় কাজ করার জন্য প্রয়োগ করা যেতে পারে । এটি তবে কিছু সমস্যা, সমস্যাগুলির পরিচয় দেয়del df['column_name'] ইতিমধ্যে বাস্তবায়নের কম ডিগ্রীতে।

উদাহরণ সমস্যা

যদি আমি ডেটাফ্রেমে একটি কলামকে "ডাইটিপস" বা "কলামগুলি" সংজ্ঞায়িত করি তবে কী হবে।

তারপরে ধরে নিন আমি এই কলামগুলি মুছতে চাই।

del df.dtypes__delattr__পদ্ধতিটিকে এমনভাবে বিভ্রান্ত করে তুলবে যেন এটি "dtyype" বৈশিষ্ট্য বা "dtyype" কলামটি মুছে ফেলতে পারে।

এই সমস্যার পিছনে আর্কিটেকচারাল প্রশ্ন

  1. একটি ডেটা ফ্রেম কি কলামের সংগ্রহ ?
  2. কোনও ডাটাফ্রেম কি সারিগুলির সংগ্রহ ?
  3. কলাম কি কোনও ডেটাফ্রেমের একটি বৈশিষ্ট্য ?

পান্ডারা উত্তর দেয়:

  1. হ্যাঁ, সব উপায়ে
  2. না, তবে আপনি যদি এটি হতে চান তবে আপনি .ix, .locবা .ilocপদ্ধতিগুলি ব্যবহার করতে পারেন ।
  3. হতে পারে, আপনি কি ডেটা পড়তে চান ? তারপরে হ্যাঁ , যদি না এই ডেটাফ্রেমের সাথে সম্পর্কিত অন্য কোনও অ্যাট্রিবিউটের নামটি ইতিমধ্যে নেওয়া না হয়। আপনি কি ডেটা পরিবর্তন করতে চান ? তাহলে না

TLDR;

আপনি ব্যবহার করতে পারবেন না del df.column_nameকারণ পান্ডাস বেশ দুর্দান্তভাবে জন্মায় স্থাপত্য যে চাহিদা এই ধরনের অনুক্রমে reconsidered করা হয়েছে জ্ঞানীয় অনৈক্য তার ব্যবহারকারীদের ঘটতে না।

Protip:

Df.column_name ব্যবহার করবেন না, এটি সুন্দর হতে পারে তবে এটি জ্ঞানীয় অনিয়মের কারণ হয়ে দাঁড়ায়

পাইথনের জেন এখানে উদ্ধৃত:

কলামটি মোছার একাধিক উপায় রয়েছে।

এটির জন্য একটি - এবং অগ্রাধিকার কেবল একটিই - প্রকাশ্য উপায় থাকতে হবে।

কলামগুলি কখনও কখনও বৈশিষ্ট্যগুলি হয় তবে কখনও কখনও হয় না।

বিশেষ কেসগুলি নিয়ম ভাঙার পক্ষে যথেষ্ট বিশেষ নয়।

না del df.dtypesdtypes অ্যাট্রিবিউট বা dtypes কলাম মুছে ফেলতে চান?

অস্পষ্টতার মুখে অনুমান করার প্রলোভনটিকে অস্বীকার করুন।


"প্রকৃতপক্ষে, __del__কখনই যে অনিশ্চিত পরিস্থিতিতে বলা হয় তাকে ব্যবহার করা উচিত নয়; সাবধানতার সাথে ব্যবহার করুন!" এখানে পুরোপুরি অপ্রাসঙ্গিক, যেমনটি এখানে ব্যবহার করা হচ্ছে পদ্ধতি __delattr__
পিপ্পারি

1
@ পিপ্পেরি আপনি মিস-উদ্ধৃতি দিচ্ছেন। এটি delবিল্টিন যার অর্থ, .__del__উদাহরণ পদ্ধতি নয়। delBuiltin করার ম্যাপিং হয় __delattr__এবং __delitem__যা আমি আমার যুক্তি বিল্ডিং করছি। সুতরাং আমি আপনাকে যা লিখতে চাই তা আপনি আবার পড়তে চান।
ফায়ার্লিনেক্স

1
__... __স্ট্যাকএক্সচেঞ্জ দ্বারা সাহসী মার্কআপ হিসাবে ব্যাখ্যা করা হয়েছে
পিপ্পারি

2
"Df.column_name ব্যবহার করবেন না, এটি বেশ সুন্দর হতে পারে তবে এটি জ্ঞানীয় অনিয়মের কারণ হয়ে দাঁড়ায়" এর অর্থ কী? আমি মনোবিজ্ঞানী নই তাই আপনার অর্থ কী তা বোঝার জন্য আমাকে এটি সন্ধান করতে হবে। এছাড়াও, দ্য জেনের উদ্ধৃতি অর্থহীন কারণ প্যান্ডাসে একই জিনিস করার জন্য বেশ কয়েকটি বৈধ উপায় রয়েছে।
CS95

58

একটি দুর্দান্ত সংযোজন হ'ল কলামগুলি উপস্থিত থাকলে কেবল তা ড্রপ করার ক্ষমতা । এইভাবে আপনি আরও ব্যবহারের কেসগুলি কভার করতে পারেন এবং এটি কেবলমাত্র লেবেলগুলিকে দেওয়া লেবেলগুলি থেকে ফেলে দেবে:

কেবল ত্রুটিগুলি যুক্ত করুন = 'উপেক্ষা করুন' , উদাহরণস্বরূপ:

df.drop(['col_name_1', 'col_name_2', ..., 'col_name_N'], inplace=True, axis=1, errors='ignore')
  • এটি পান্ডাস 0.16.1 থেকে নতুন। ডকুমেন্টেশন এখানে

41

সংস্করণ 0.16.1 থেকে আপনি করতে পারেন

df.drop(['column_name'], axis = 1, inplace = True, errors = 'ignore')

3
এবং এটি একাধিক কলাম বাদ দেওয়ার পক্ষেও সমর্থন করে, যার মধ্যে কিছু বিদ্যমান নেই (যেমন ত্রুটি উত্থাপন ব্যতীত errors= 'ignore') df.drop(['column_1','column_2'], axis=1 , inplace=True,errors= 'ignore'), যদি এই জাতীয় অ্যাপ্লিকেশন পছন্দ হয়!
মিউন

31

সর্বদা []স্বরলিপিটি ব্যবহার করা ভাল অনুশীলন । একটি কারণ হ'ল গুণযুক্ত সূচকগুলি ( df.column_name) গুণিত সূচকগুলির জন্য কাজ করে না:

In [1]: df = DataFrame([[1, 2, 3], [4, 5, 6]])

In [2]: df[1]
Out[2]:
0    2
1    5
Name: 1

In [3]: df.1
  File "<ipython-input-3-e4803c0d1066>", line 1
    df.1
       ^
SyntaxError: invalid syntax

26

পান্ডাস 0.21+ উত্তর

পান্ডাস সংস্করণ 0.21 এবং পদ্ধতিগুলির স্বাক্ষরের সাথে মেলে dropউভয় indexএবং columnsপরামিতিগুলি অন্তর্ভুক্ত করার জন্য পদ্ধতিটি সামান্য পরিবর্তিত করেছে ।renamereindex

df.drop(columns=['column_a', 'column_c'])

ব্যক্তিগতভাবে, আমি axisকলামগুলি বা সূচি বোঝাতে প্যারামিটারটি ব্যবহার করতে পছন্দ করি কারণ এটি প্রায় সমস্ত প্যান্ডাস পদ্ধতিতে ব্যবহৃত মূল শব্দ প্যারামিটার। তবে, এখন আপনার 0.21 সংস্করণে কিছু যুক্ত পছন্দ রয়েছে।


1
df.DP (['কলাম_এ', 'কলাম_সি'], অক্ষ = 1) | এটি আপাতত আমার জন্য কাজ করছে
YouAreAwesome

21

পান্ডাস 0.16.1++ এ আপনি কেবল কলামগুলি ড্রপ করতে পারেন কেবলমাত্র @eiTanLaVi দ্বারা পোস্ট করা সমাধান অনুসারে সেগুলি উপস্থিত রয়েছে। সংস্করণটির আগে, আপনি শর্তসাপেক্ষে তালিকা বোধের মাধ্যমে একই ফলাফল অর্জন করতে পারেন:

df.drop([col for col in ['col_name_1','col_name_2',...,'col_name_N'] if col in df], 
        axis=1, inplace=True)

14

টি এল; ডিআর

একটি প্রান্তিক আরও দক্ষ সমাধান খুঁজতে অনেক প্রচেষ্টা effort এর সরলতার ত্যাগ করার সময় যুক্ত হওয়া জটিলতার ন্যায্যতা প্রমাণ করা কঠিন Difdf.drop(dlst, 1, errors='ignore')

df.reindex_axis(np.setdiff1d(df.columns.values, dlst), 1)

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

আমি একসাথে একাধিক কলাম মুছে ফেলার সাধারণ সমাধানগুলিতেও মনোনিবেশ করব এবং কলামগুলি উপস্থিত না করার জন্য চেষ্টা করার অনুমতি দেই allowing

এই সমাধানগুলি ব্যবহার করা সাধারণ এবং এটি সাধারণ ক্ষেত্রেও কাজ করবে।


সেটআপটি মুছে ফেলার জন্য এবং তালিকাটি
বিবেচনা করুনpd.DataFrame dfdlst

df = pd.DataFrame(dict(zip('ABCDEFGHIJ', range(1, 11))), range(3))
dlst = list('HIJKLM')

df

   A  B  C  D  E  F  G  H  I   J
0  1  2  3  4  5  6  7  8  9  10
1  1  2  3  4  5  6  7  8  9  10
2  1  2  3  4  5  6  7  8  9  10

dlst

['H', 'I', 'J', 'K', 'L', 'M']

ফলাফলটি দেখতে এমন হওয়া উচিত:

df.drop(dlst, 1, errors='ignore')

   A  B  C  D  E  F  G
0  1  2  3  4  5  6  7
1  1  2  3  4  5  6  7
2  1  2  3  4  5  6  7

যেহেতু আমি কলামটি মুছার সাথে অন্য কলামগুলি নির্বাচন করার সমীকরণ করছি, তাই আমি এটিকে দুটি প্রকারে বিভক্ত করব:

  1. লেবেল নির্বাচন
  2. বুলিয়ান নির্বাচন

লেবেল নির্বাচন

আমরা যে লেবেলগুলি রাখতে চাই এবং যেগুলি কলামগুলি মুছতে চাই না সেগুলি উপস্থাপন করে এমন লেবেলগুলির তালিকা / অ্যারে উত্পাদন করে শুরু করি।

  1. df.columns.difference(dlst)

    Index(['A', 'B', 'C', 'D', 'E', 'F', 'G'], dtype='object')
  2. np.setdiff1d(df.columns.values, dlst)

    array(['A', 'B', 'C', 'D', 'E', 'F', 'G'], dtype=object)
  3. df.columns.drop(dlst, errors='ignore')

    Index(['A', 'B', 'C', 'D', 'E', 'F', 'G'], dtype='object')
  4. list(set(df.columns.values.tolist()).difference(dlst))

    # does not preserve order
    ['E', 'D', 'B', 'F', 'G', 'A', 'C']
  5. [x for x in df.columns.values.tolist() if x not in dlst]

    ['A', 'B', 'C', 'D', 'E', 'F', 'G']


নির্বাচন প্রক্রিয়াটির তুলনা করার জন্য লেবেলগুলি থেকে কলামগুলি ধরে নিন:

 cols = [x for x in df.columns.values.tolist() if x not in dlst]

তারপরে আমরা মূল্যায়ন করতে পারি

  1. df.loc[:, cols]
  2. df[cols]
  3. df.reindex(columns=cols)
  4. df.reindex_axis(cols, 1)

যা সকল মূল্যায়ন করে:

   A  B  C  D  E  F  G
0  1  2  3  4  5  6  7
1  1  2  3  4  5  6  7
2  1  2  3  4  5  6  7

বুলিয়ান স্লাইস

টুকরো টুকরো করার জন্য আমরা বুলিয়ানগুলির একটি অ্যারে / তালিকা তৈরি করতে পারি

  1. ~df.columns.isin(dlst)
  2. ~np.in1d(df.columns.values, dlst)
  3. [x not in dlst for x in df.columns.values.tolist()]
  4. (df.columns.values[:, None] != dlst).all(1)


তুলনা করার জন্য বুলিয়ান থেকে কলামগুলি

bools = [x not in dlst for x in df.columns.values.tolist()]
  1. df.loc[: bools]

যা সকল মূল্যায়ন করে:

   A  B  C  D  E  F  G
0  1  2  3  4  5  6  7
1  1  2  3  4  5  6  7
2  1  2  3  4  5  6  7

দৃust় সময়

ক্রিয়াকলাপ

setdiff1d = lambda df, dlst: np.setdiff1d(df.columns.values, dlst)
difference = lambda df, dlst: df.columns.difference(dlst)
columndrop = lambda df, dlst: df.columns.drop(dlst, errors='ignore')
setdifflst = lambda df, dlst: list(set(df.columns.values.tolist()).difference(dlst))
comprehension = lambda df, dlst: [x for x in df.columns.values.tolist() if x not in dlst]

loc = lambda df, cols: df.loc[:, cols]
slc = lambda df, cols: df[cols]
ridx = lambda df, cols: df.reindex(columns=cols)
ridxa = lambda df, cols: df.reindex_axis(cols, 1)

isin = lambda df, dlst: ~df.columns.isin(dlst)
in1d = lambda df, dlst: ~np.in1d(df.columns.values, dlst)
comp = lambda df, dlst: [x not in dlst for x in df.columns.values.tolist()]
brod = lambda df, dlst: (df.columns.values[:, None] != dlst).all(1)

পরীক্ষামূলক

res1 = pd.DataFrame(
    index=pd.MultiIndex.from_product([
        'loc slc ridx ridxa'.split(),
        'setdiff1d difference columndrop setdifflst comprehension'.split(),
    ], names=['Select', 'Label']),
    columns=[10, 30, 100, 300, 1000],
    dtype=float
)

res2 = pd.DataFrame(
    index=pd.MultiIndex.from_product([
        'loc'.split(),
        'isin in1d comp brod'.split(),
    ], names=['Select', 'Label']),
    columns=[10, 30, 100, 300, 1000],
    dtype=float
)

res = res1.append(res2).sort_index()

dres = pd.Series(index=res.columns, name='drop')

for j in res.columns:
    dlst = list(range(j))
    cols = list(range(j // 2, j + j // 2))
    d = pd.DataFrame(1, range(10), cols)
    dres.at[j] = timeit('d.drop(dlst, 1, errors="ignore")', 'from __main__ import d, dlst', number=100)
    for s, l in res.index:
        stmt = '{}(d, {}(d, dlst))'.format(s, l)
        setp = 'from __main__ import d, dlst, {}, {}'.format(s, l)
        res.at[(s, l), j] = timeit(stmt, setp, number=100)

rs = res / dres

rs

                          10        30        100       300        1000
Select Label                                                           
loc    brod           0.747373  0.861979  0.891144  1.284235   3.872157
       columndrop     1.193983  1.292843  1.396841  1.484429   1.335733
       comp           0.802036  0.732326  1.149397  3.473283  25.565922
       comprehension  1.463503  1.568395  1.866441  4.421639  26.552276
       difference     1.413010  1.460863  1.587594  1.568571   1.569735
       in1d           0.818502  0.844374  0.994093  1.042360   1.076255
       isin           1.008874  0.879706  1.021712  1.001119   0.964327
       setdiff1d      1.352828  1.274061  1.483380  1.459986   1.466575
       setdifflst     1.233332  1.444521  1.714199  1.797241   1.876425
ridx   columndrop     0.903013  0.832814  0.949234  0.976366   0.982888
       comprehension  0.777445  0.827151  1.108028  3.473164  25.528879
       difference     1.086859  1.081396  1.293132  1.173044   1.237613
       setdiff1d      0.946009  0.873169  0.900185  0.908194   1.036124
       setdifflst     0.732964  0.823218  0.819748  0.990315   1.050910
ridxa  columndrop     0.835254  0.774701  0.907105  0.908006   0.932754
       comprehension  0.697749  0.762556  1.215225  3.510226  25.041832
       difference     1.055099  1.010208  1.122005  1.119575   1.383065
       setdiff1d      0.760716  0.725386  0.849949  0.879425   0.946460
       setdifflst     0.710008  0.668108  0.778060  0.871766   0.939537
slc    columndrop     1.268191  1.521264  2.646687  1.919423   1.981091
       comprehension  0.856893  0.870365  1.290730  3.564219  26.208937
       difference     1.470095  1.747211  2.886581  2.254690   2.050536
       setdiff1d      1.098427  1.133476  1.466029  2.045965   3.123452
       setdifflst     0.833700  0.846652  1.013061  1.110352   1.287831

fig, axes = plt.subplots(2, 2, figsize=(8, 6), sharey=True)
for i, (n, g) in enumerate([(n, g.xs(n)) for n, g in rs.groupby('Select')]):
    ax = axes[i // 2, i % 2]
    g.plot.bar(ax=ax, title=n)
    ax.legend_.remove()
fig.tight_layout()

এটি চালাতে যে সময় লাগে তার সাথে তুলনামূলক df.drop(dlst, 1, errors='ignore')। দেখে মনে হচ্ছে এই সমস্ত প্রচেষ্টা পরেও আমরা কেবল পরিমিতভাবে পারফরম্যান্সে উন্নতি করি।

এখানে চিত্র বর্ণনা লিখুন

যদি বাস্তবে সেরা সমাধানগুলি হ্যাক reindexবা ব্যবহার reindex_axisকরে list(set(df.columns.values.tolist()).difference(dlst))। ঘনিষ্ঠ দ্বিতীয় ও এখনও খুব সীমিতভাবে ভাল চেয়ে dropহয় np.setdiff1d

rs.idxmin().pipe(
    lambda x: pd.DataFrame(
        dict(idx=x.values, val=rs.lookup(x.values, x.index)),
        x.index
    )
)

                      idx       val
10     (ridx, setdifflst)  0.653431
30    (ridxa, setdifflst)  0.746143
100   (ridxa, setdifflst)  0.816207
300    (ridx, setdifflst)  0.780157
1000  (ridxa, setdifflst)  0.861622

2

ডট সিনট্যাক্স জাভাস্ক্রিপ্টে কাজ করে তবে পাইথনে নয়।

  • পাইথন: del df['column_name']
  • জাভাস্ক্রিপ্ট: del df['column_name'] বা del df.column_name

2

যদি আপনার আসল ডেটাফ্রেমটি dfখুব বড় না হয় তবে আপনার কোনও মেমরির সীমাবদ্ধতা নেই, এবং আপনার কেবল কয়েকটি কলাম রাখতে হবে তবে আপনার প্রয়োজন কেবলমাত্র কলামগুলি সহ একটি নতুন ডাটাফ্রেম তৈরি করতে পারেন:

new_df = df[['spam', 'sausage']]

2

আমরা পারি সরান বা মুছুন একটি নির্দিষ্ট কলাম বা sprcified কলাম ড্রপ () পদ্ধতি।

ধরুন ডিএফ একটি ডেটাফ্রেম।

কলামটি সরানো হবে = কলাম 0 0

কোড:

df = df.drop(column0, axis=1)

একাধিক কলাম কলাম 1, কল 2,। । । , কোলন, আমাদের সমস্ত কলামগুলি তালিকায় সরিয়ে ফেলতে হবে inোকাতে হবে। তারপরে ড্রপ () পদ্ধতিতে এগুলি সরান।

কোড:

df = df.drop([col1, col2, . . . , coln], axis=1)

আমি আশা করি এটি সহায়ক হবে।


df = df.drop([col1, col2, . . . , coln], axis=1)আমি কল 1, কোল 2 ইত্যাদির স্থানে একটি চলক নাম নির্দিষ্ট করে দিলে এটি কাজ করে না আমি যখন ত্রুটিযুক্ত কলামটি অক্ষরে নেই তবে এটি উপস্থিত থাকলে definitely @ লিটিন আপনি সাহায্য করতে পারেন?
আরএসএম

1

পান্ডাস ডেটাফ্রেমে একটি কলাম মুছার আর একটি উপায়

যদি আপনি ইন-প্লেস মুছে ফেলার সন্ধান করেন না তবে কলামগুলি DataFrame(...)ফাংশন হিসাবে নির্দিষ্ট করে নির্দিষ্ট করে আপনি একটি নতুন ডেটাফ্রেম তৈরি করতে পারেন

my_dict = { 'name' : ['a','b','c','d'], 'age' : [10,20,25,22], 'designation' : ['CEO', 'VP', 'MD', 'CEO']}

df = pd.DataFrame(my_dict)

হিসাবে একটি নতুন ডাটাফ্রেম তৈরি করুন

newdf = pd.DataFrame(df, columns=['name', 'age'])

আপনি ডেল / ড্রপ দিয়ে যা পান তার ফলস্বরূপ আপনি ভাল ফলাফল পান


1
এটি প্রযুক্তিগতভাবে সঠিক তবে আপনি মুছে ফেলতে চান এমন একটি (বা কয়েকটি) কলামের পরিবর্তে প্রতিটি কলামের তালিকা রাখতে বোকামি মনে হচ্ছে।
CS95
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.