একটি পান্ডাস ডেটা ফ্রেমে একাধিক কলাম নির্বাচন করা


1108

আমার কাছে বিভিন্ন কলামে ডেটা রয়েছে তবে এটি অন্য ভেরিয়েবলে সংরক্ষণ করতে কীভাবে এটি বের করতে হয় তা আমি জানি না।

index  a   b   c
1      2   3   4
2      3   4   5

আমি কিভাবে নির্বাচন করবেন 'a', 'b'এবং df1 করার জন্য কার্ডটি সংরক্ষণ করবেন?

আমি চেষ্টা করেছিলাম

df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']

কেউ কাজ করে না বলে মনে হচ্ছে।


2
.ixএটি কখনই অস্পষ্ট হিসাবে আপনি ব্যবহার করতে চান না । ব্যবহার করুন .ilocবা .locযদি আপনার অবশ্যই।
একিউম্যানাস

1
শিরোনামের নাম উল্লেখ না করে এটি করার কোনও উপায় আছে কি? আর এর মতো, আমি এটি এটি করতে পারি: > csvtable_imp_1 <- csvtable_imp[0:6]এবং এটি 0 এবং 6 এর মধ্যে প্রথম কলামগুলির ব-দ্বীপ পরিমাণ নির্বাচন করে I
মাইকেলআর

আমি এটি দিয়ে আরও কিছু কাজ করেছি। এমন কিছু খুঁজে পেল যা ইচ্ছে মতো কাজ করেছিল। ডিফল্ট হ'ল চরের সংখ্যা নির্বাচন করা এবং কলামগুলি নয়। infile_1 = largefile_stay.ix[:,0:6]
মাইকেলআর

3
এই দেরীতে যারা হোঁচট খাচ্ছে তাদের ixজন্য এখন অবহেলিত। পান্ডস সুপারিশ হয়: loc(লেবেল ভিত্তিক সূচক) বা iloc(অবস্থান ভিত্তিক সূচক)।
জায়েদহ

উত্তর:


1766

কলামের নামগুলি (যা স্ট্রিং রয়েছে) আপনি যেভাবে চেষ্টা করেছেন সেভাবে কাটা যাবে না।

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

df1 = df[['a','b']]

বিকল্পভাবে, যদি এটি তাদের নাম অনুসারে সংখ্যাসূচকভাবে তালিকাভুক্ত করার জন্য গুরুত্বপূর্ণ হয় (বলুন যে আপনার কোডটি প্রথম দুটি কলামের নাম না জেনে স্বয়ংক্রিয়ভাবে এটি করা উচিত) তবে আপনি পরিবর্তে এটি করতে পারেন:

df1 = df.iloc[:,0:2] # Remember that Python does not slice inclusive of the ending index.

অতিরিক্তভাবে, আপনাকে পান্ডাস অবজেক্ট বনাম object অবজেক্টের অনুলিপিটিতে দেখার ধারণার সাথে নিজেকে পরিচিত করা উচিত। উপরের পদ্ধতিগুলির মধ্যে প্রথমটি পছন্দসই সাব-অবজেক্টের (কাঙ্ক্ষিত টুকরো) স্মৃতিতে একটি নতুন অনুলিপি প্রদান করবে।

কখনও কখনও, তবে পান্ডাসে ইনডেক্সিং কনভেনশন রয়েছে যা এটি করে না এবং পরিবর্তে আপনাকে একটি নতুন ভেরিয়েবল দেয় যা কেবলমাত্র মেমরির একই অংশটিকে মূল বস্তুর সাব-অবজেক্ট বা স্লাইস হিসাবে বোঝায়। এটি সূচকের দ্বিতীয় পদ্ধতিতে ঘটবে, তাই আপনি copy()নিয়মিত অনুলিপি পেতে ফাংশনটি দিয়ে এটি পরিবর্তন করতে পারেন । এটি যখন ঘটে তখন আপনি কাটা বস্তুটিকে যা ভাবেন তা পরিবর্তন করা কখনও কখনও আসল বস্তুকে পরিবর্তন করতে পারে। সর্বদা এটির জন্য নজর রাখা ভাল।

df1 = df.iloc[0,0:2].copy() # To avoid the case where changing df1 also changes df

ব্যবহার করতে iloc, আপনাকে কলামের অবস্থানগুলি (বা সূচকগুলি) জানতে হবে। যেহেতু কলামের অবস্থানগুলি পরিবর্তিত হতে পারে, হার্ড-কোডিং সূচকগুলির পরিবর্তে, আপনি কলাম সূচকগুলি পেতে ডেটাফ্রেম অবজেক্টের পদ্ধতির কার্যকারিতা ilocসহ ব্যবহার করতে পারেন ।get_loccolumns

{df.columns.get_loc(c):c for idx, c in enumerate(df.columns)}

নাম এবং ব্যবহারের মাধ্যমে কলামগুলি অ্যাক্সেস করতে এখন আপনি এই অভিধানটি ব্যবহার করতে পারেন iloc


192
দ্রষ্টব্য: df[['a','b']]একটি অনুলিপি তৈরি করেছে
ওয়েস ম্যাককিনি

1
হ্যাঁ এটি আমার উত্তরে অন্তর্ভুক্ত ছিল। ix[]আপনি যদি কোনও কারণে ব্যবহার করতে পছন্দ করেন তবে অনুলিপিটির বিটটি কেবলমাত্র ব্যবহারের ix[]জন্য ছিল।
এলী

1
ixসূচি সারি, কলাম নয়। আমি ভেবেছিলাম ওপি কলাম চায়।
hobs

9
ixস্লাইস আর্গুমেন্ট গ্রহণ করে, তাই আপনি কলামগুলিও পেতে পারেন। উদাহরণস্বরূপ, df.ix[0:2, 0:2]উপরের বাম 2x2 উপ-অ্যারে ঠিক একইভাবে NumPy ম্যাট্রিক্সের জন্য পায় (অবশ্যই আপনার কলামের নামগুলির উপর নির্ভর করে)। এমনকি আপনি পছন্দ মতো কলামগুলির স্ট্রিং নামগুলিতে স্লাইস সিনট্যাক্স ব্যবহার করতে পারেন df.ix[0, 'Col1':'Col5']। এটি সমস্ত কলাম পায় যা অ্যারের মধ্যে Col1এবং অর্ডার অনুযায়ী ঘটে থাকে । সূচী সারি বললে ভুল হয় । এটি কেবল এটির সবচেয়ে প্রাথমিক ব্যবহার। এটি এর চেয়ে অনেক বেশি সূচকে সমর্থন করে। সুতরাং, এই প্রশ্নের জন্য পুরোপুরি সাধারণ। Col5df.columnsixix
ely

7
@ অ্যান্ড্রুস্যাসিডি আবার কখনও .ix ব্যবহার করবেন না। আপনি যদি পূর্ণসংখ্যার ব্যবহার দিয়ে স্লাইস করতে চান .ilocযা পাইথন তালিকার মতো শেষ অবস্থানের সাথে একচেটিয়া।
টেড পেট্রো

133

০.০১.০ সংস্করণ অনুসারে, আপনি যেভাবে সূচকটি ব্যবহার করে চেষ্টা করেছেন সেভাবে কলামগুলি কাটা যাবে.loc :

df.loc[:, 'C':'E']

এর সমতুল্য

df[['C', 'D', 'E']]  # or df.loc[:, ['C', 'D', 'E']]

এবং এর Cমাধ্যমে কলামগুলি প্রদান করে E


এলোমেলোভাবে উত্পন্ন ডেটা ফ্রেমের একটি ডেমো:

import pandas as pd
import numpy as np
np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(100, 6)), 
                  columns=list('ABCDEF'), 
                  index=['R{}'.format(i) for i in range(100)])
df.head()

Out: 
     A   B   C   D   E   F
R0  99  78  61  16  73   8
R1  62  27  30  80   7  76
R2  15  53  80  27  44  77
R3  75  65  47  30  84  86
R4  18   9  41  62   1  82

C থেকে E পর্যন্ত কলামগুলি পেতে (দ্রষ্টব্য যে পূর্ণসংখ্যার কাটা বিপরীতে, 'E' কলামগুলিতে অন্তর্ভুক্ত রয়েছে):

df.loc[:, 'C':'E']

Out: 
      C   D   E
R0   61  16  73
R1   30  80   7
R2   80  27  44
R3   47  30  84
R4   41  62   1
R5    5  58   0
...

লেবেলের ভিত্তিতে সারি নির্বাচনের জন্য একই কাজ করে। এই কলামগুলি থেকে 'R6' এ সারিগুলি পান:

df.loc['R6':'R10', 'C':'E']

Out: 
      C   D   E
R6   51  27  31
R7   83  19  18
R8   11  67  65
R9   78  27  29
R10   7  16  94

.locএছাড়াও একটি বুলিয়ান অ্যারে গ্রহণ করে যাতে আপনি কলামগুলি নির্বাচন করতে পারেন যার অ্যারেতে সম্পর্কিত এন্ট্রি রয়েছে True। উদাহরণস্বরূপ, df.columns.isin(list('BCD'))রিটার্ন array([False, True, True, True, False, False], dtype=bool)- কলামের নাম তালিকায় থাকলে সত্য ['B', 'C', 'D']; মিথ্যা, অন্যথায়।

df.loc[:, df.columns.isin(list('BCD'))]

Out: 
      B   C   D
R0   78  61  16
R1   27  30  80
R2   53  80  27
R3   65  47  30
R4    9  41  62
R5   78   5  58
...

110

ধরে নিচ্ছি আপনার কলামের নামগুলি ( df.columns) ['index','a','b','c']হ'ল, তারপরে আপনি যে ডেটা চান তা তৃতীয় ও চতুর্থ কলামে রয়েছে। আপনার স্ক্রিপ্টটি চলার সময় যদি আপনি তাদের নামগুলি না জানেন তবে আপনি এটি করতে পারেন

newdf = df[df.columns[2:4]] # Remember, Python is 0-offset! The "3rd" entry is at slot 2.

যেমনটি ইএমএস তার উত্তরে উল্লেখ করেছে , df.ixকলামগুলি আরও কিছুটা সংক্ষিপ্তভাবে টুকরো টুকরো করে কাটছে, তবে .columnsস্লাইসিং ইন্টারফেসটি আরও প্রাকৃতিক হতে পারে কারণ এটি ভ্যানিলা 1-ডি পাইথন তালিকাকে সূচক / স্লাইসিং সিনট্যাক্স ব্যবহার করে।

সতর্কতা: 'index'একটি DataFrameকলামের খারাপ নাম । একই লেবেলটি আসল df.indexঅ্যাট্রিবিউট, একটি Indexঅ্যারের জন্যও ব্যবহৃত হয় । সুতরাং আপনার কলামটি ফিরে আসবে df['index']এবং আসল ডেটাফ্রেম সূচক দ্বারা ফিরে আসবে df.index। একটি Indexএকটি বিশেষ ধরনের Seriesএটা উপাদান 'মূল্যবোধের লুকআপ জন্য অপ্টিমাইজ করা। Df.index এর জন্য এটি তাদের লেবেল দ্বারা সারি সন্ধান করা। তাদের লেবেলগুলির মাধ্যমে কলামগুলি অনুসন্ধান করার জন্য এই df.columnsবৈশিষ্ট্যটিও একটি pd.Indexঅ্যারে।


3
আমি উপরে আমার মন্তব্যে উল্লেখ করা হয়েছে, .ixহয় না শুধু সারি জন্য। এটি সাধারণ উদ্দেশ্যে স্লাইসিংয়ের জন্য, এবং বহুমাত্রিক কাটানোর জন্য ব্যবহার করা যেতে পারে can এটি মূলত NumPy এর স্বাভাবিক __getitem__সিনট্যাক্সের একটি ইন্টারফেস । এটি বলেছিল, আপনি কেবল একটি ট্রান্সপোজ অপারেশন প্রয়োগ করে কলাম-স্লাইসিং সমস্যাটিকে একটি সারি-স্লাইসিং সমস্যায় সহজেই রূপান্তর করতে পারেন df.T,। আপনার উদাহরণ ব্যবহার করে columns[1:3], যা কিছুটা বিভ্রান্তিকর। এর ফলাফল columnsa Series; সতর্কতা অবলম্বন করুন যে এটি কেবল অ্যারের মতো আচরণ করবে না। এছাড়াও, আপনার সম্ভবত এটি columns[2:3]আপনার "তৃতীয় এবং চতুর্থ" মন্তব্যের সাথে মিলে যায়।
ely

@ মিঃ এফ: আমার [2:4]কথা ঠিক আছে। আপনার [2:3]ভুল। এবং সিক্যুয়েন্স / সিরিজ উত্পন্ন করতে স্ট্যান্ডার্ড পাইথন স্লাইসিং নোটেশন ব্যবহার করা আইএমওকে বিভ্রান্ত করছে না। তবে অন্তর্নিহিত নিম্পি অ্যারে দিয়ে অ্যাক্সেস করার জন্য আপনার ডেটাফ্রেম ইন্টারফেসের বাইপাসটি পছন্দ করি ix
hobs

আপনি এই ক্ষেত্রে সঠিক, তবে আমি যে বিষয়টিটি করার চেষ্টা করছিলাম সেটি হ'ল সাধারণভাবে পান্ডসে লেবেলগুলি দিয়ে কাটা টুকরো টুকরো টুকরো অন্তর্ভুক্ত (বা কমপক্ষে এটি বেশিরভাগ পূর্ববর্তী পান্ডার সংস্করণে ছিল)) সুতরাং আপনি যদি পুনরুদ্ধার করেন df.columnsএবং লেবেল দ্বারা এটি স্লাইস করতে চান , তবে আপনি যদি এটি পূর্ণসংখ্যার সূচক অবস্থানের দ্বারা স্লাইস করেন তবে তার চেয়ে আলাদা স্লাইস শব্দার্থবিদ্যা থাকতে পারে । আমি অবশ্যই আমার আগের মন্তব্যে এটি ভালভাবে ব্যাখ্যা করতে পারি নি।
ely

আহ, এখন আমি আপনার বক্তব্য দেখতে পাচ্ছি। আমি ভুলে গিয়েছি যে columnsএটি একটি অপরিবর্তনীয় সিরিজ এবং সূচক হিসাবে লেবেলগুলি ব্যবহারের জন্য প্রযোজককে ওভাররাইড করা হয়েছে। পরিষ্কার করার জন্য সময় দেওয়ার জন্য ধন্যবাদ।
hobs

2
হ্রাসকারী সতর্কতা নোট করুন: .ix হ্রাস করা হয়েছে। অতএব এটি উপলব্ধি করে: newdf = df [df.colouts [2: 4]]
মার্টিয়ান লুবারিংক

64
In [39]: df
Out[39]: 
   index  a  b  c
0      1  2  3  4
1      2  3  4  5

In [40]: df1 = df[['b', 'c']]

In [41]: df1
Out[41]: 
   b  c
0  3  4
1  4  5

1
যদি আমি কলামটির নাম পরিবর্তন করতে চাই, উদাহরণস্বরূপ এমন কিছু: df[['b as foo', 'c as bar']যেমন আউটপুট কলামটির bনাম পরিবর্তন করে fooএবং কলাম cহিসাবে bar?
কুয়ানব

5
df[['b', 'c']].rename(columns = {'b' : 'foo', 'c' : 'bar'})
গ্রেগ

61

আমি বুঝতে পারি এই প্রশ্নটি বেশ পুরানো, তবে পান্ডার সর্বশেষ সংস্করণে হুবহু এটি করার সহজ উপায় রয়েছে। কলামের নামগুলি (যা স্ট্রিং রয়েছে) আপনি যেভাবে পছন্দ করেন তা কাটা যেতে পারে।

columns = ['b', 'c']
df1 = pd.DataFrame(df, columns=columns)

6
এটি কেবল সৃষ্টিতেই করা যেতে পারে। আপনার কাছে ইতিমধ্যে এটি একটি ডেটাফ্রেমে রয়েছে কিনা তা প্রশ্ন জিজ্ঞাসা করছে।
Banjocat

2
@ বানজোক্যাট, এটি বিদ্যমান ডাটাফ্রেমের সাথে কাজ করে
শে

23

আপনি বাদ দিতে কলামগুলির একটি তালিকা সরবরাহ করতে পারেন এবং drop()একটি পান্ডাস ডেটা ফ্রেমের ফাংশনটি ব্যবহার করে প্রয়োজনীয় কলামগুলি দিয়েই ডেটাফ্রেম ফিরে আসতে পারেন ।

এমনি বলছি

colsToDrop = ['a']
df.drop(colsToDrop, axis=1)

কেবল কলাম bএবং দিয়ে একটি ডেটা ফ্রেম ফিরিয়ে দেবে c

dropপদ্ধতি নথিভুক্ত করা এখানে


23

পান্ডাস সহ,

বুদ্ধি কলামের নাম

dataframe[['column1','column2']]

ইলোক এবং সূচক নম্বর সহ নির্দিষ্ট কলামগুলি দ্বারা নির্বাচন করতে:

dataframe.iloc[:,[1,2]]

লোক কলামের নামগুলির মতো ব্যবহার করা যেতে পারে

dataframe.loc[:,['column1','column2']]

20

আমি এই পদ্ধতিটি খুব দরকারী বলে মনে করেছি:

# iloc[row slicing, column slicing]
surveys_df.iloc [0:3, 1:4]

আরও বিশদ এখানে পাওয়া যাবে


আপনি কীভাবে বলবেন, কেবল 2 এবং 5 কলামগুলি রাখবেন?
324

1
তা হলে হবে surveys_df.iloc [:, [2,5]]
জুলিয়ান গর্ফার

15

0.21.0 দিয়ে শুরু করে, এক বা একাধিক নিখোঁজ লেবেলের সাথে একটি তালিকা ব্যবহার করে .locবা তার পক্ষে অনুমান করা []হয় .reindex। সুতরাং, আপনার প্রশ্নের উত্তরটি হ'ল:

df1 = df.reindex(columns=['b','c'])

পূর্ববর্তী সংস্করণগুলিতে, .loc[list-of-labels]কমপক্ষে 1 টি কী পাওয়া গেলে ততক্ষণ ব্যবহার করা (অন্যথায় এটি উত্থাপন করবে KeyError) would এই আচরণটি অবহেলা করা হয়েছে এবং এখন একটি সতর্কতা বার্তা দেখায়। প্রস্তাবিত বিকল্প ব্যবহার করা হয় .reindex()

ইনডেক্সিং এবং ডেটা নির্বাচন করাতে আরও পড়ুন


10

আপনি পান্ডা ব্যবহার করতে পারেন। আমি ডেটা ফ্রেম তৈরি করেছি:

    import pandas as pd
    df = pd.DataFrame([[1, 2,5], [5,4, 5], [7,7, 8], [7,6,9]], 
                      index=['Jane', 'Peter','Alex','Ann'],
                      columns=['Test_1', 'Test_2', 'Test_3'])

ডেটা ফ্রেম:

           Test_1  Test_2  Test_3
    Jane        1       2       5
    Peter       5       4       5
    Alex        7       7       8
    Ann         7       6       9

নামে 1 বা একাধিক কলাম নির্বাচন করতে:

    df[['Test_1','Test_3']]

           Test_1  Test_3
    Jane        1       5
    Peter       5       5
    Alex        7       8
    Ann         7       9

আপনি এটি ব্যবহার করতে পারেন:

    df.Test_2

এবং আপনি কলাম পান Test_2

    Jane     2
    Peter    4
    Alex     7
    Ann      6

আপনি এই সারিগুলি ব্যবহার করে কলাম এবং সারি নির্বাচন করতে পারেন .loc()। একে বলা হয় "স্লাইসিং" । লক্ষ্য করুন যে, আমি কলাম থেকে নেওয়া Test_1থেকেTest_3

    df.loc[:,'Test_1':'Test_3']

"স্লাইস" হ'ল:

            Test_1  Test_2  Test_3
     Jane        1       2       5
     Peter       5       4       5
     Alex        7       7       8
     Ann         7       6       9

এবং যদি আপনি কেবল চান Peterএবং Annকলামগুলি থেকে Test_1এবং Test_3:

    df.loc[['Peter', 'Ann'],['Test_1','Test_3']]

তুমি পাও:

           Test_1  Test_3
    Peter       5       5
    Ann         7       9

8

আপনি যদি সারি সূচক এবং কলামের নাম অনুসারে একটি উপাদান পেতে চান তবে আপনি এটি ঠিক এর মতো করতে পারেন df['b'][0]। এটি আপনি ইমেজ করতে পারেন হিসাবে সহজ।

অথবা আপনি ব্যবহার করতে পারেন df.ix[0,'b'], সূচক এবং লেবেলের মিশ্র ব্যবহার।

দ্রষ্টব্য: যেহেতু v0.20 / এর ixপক্ষে অবচয় করা হয়েছে ।lociloc


6

একটি পৃথক এবং সহজ পদ্ধতির: সারি পুনরাবৃত্তি

iterows ব্যবহার

 df1= pd.DataFrame() #creating an empty dataframe
 for index,i in df.iterrows():
    df1.loc[index,'A']=df.loc[index,'A']
    df1.loc[index,'B']=df.loc[index,'B']
    df1.head()

5
দয়া করে iterrows () ব্যবহারের পরামর্শ দিবেন না। এটি পান্ডার ইতিহাসের সবচেয়ে খারাপ এন্টি-প্যাটার্নের একটি স্পষ্ট সক্ষম enable
সিএস 95

আপনি "দয়া করে সবচেয়ে খারাপ বিরোধী" বলতে কী বোঝাতে পারেন?
অঙ্কিতা

1
আইএমএইচও, আইট্রো () এর পান্ডাস ব্যবহার করার সময় শেষ বিকল্প হওয়া উচিত।
ইফ

5

উপরের প্রতিক্রিয়াগুলিতে আলোচিত বিভিন্ন পন্থা এই ধারণার উপর ভিত্তি করে যে হয় হয় ব্যবহারকারী কলাম সূচকগুলি ড্রপ বা সাবসেট করতে জানে বা ব্যবহারকারী কলামের একটি ব্যাপ্তি ব্যবহার করে ডেটাফ্রেমটি সাবসেট করতে চায় (উদাহরণস্বরূপ 'সি': 'ই' এর মধ্যে) । pandas.DataFrame.drop () অবশ্যই ব্যবহারকারী দ্বারা সংজ্ঞায়িত কলামের তালিকার উপর ভিত্তি উপসেট ডেটাতে একটি বিকল্পের (যদিও আপনি সতর্ক করে আপনি সবসময় dataframe কপি ব্যবহার এবং হতে হবে inplace পরামিতি সেট করা উচিত নয় সত্য !!)

অন্য বিকল্পটি হ'ল প্যান্ডাসকোলোম.ডিফারেন্স () ব্যবহার করুন যা কলামের নামগুলিতে একটি সেট পার্থক্য করে এবং পছন্দসই কলামগুলি সহ একটি সূচক প্রকারের অ্যারে প্রদান করে। সমাধানটি নিম্নলিখিত:

df = pd.DataFrame([[2,3,4],[3,4,5]],columns=['a','b','c'],index=[1,2])
columns_for_differencing = ['a']
df1 = df.copy()[df.columns.difference(columns_for_differencing)]
print(df1)

আউটপুটটি হবে: b c 1 3 4 2 4 5


1
কপিটি () প্রয়োজনীয় নয়। যেমন: df1 = df[df.columns.difference(columns_for_differencing)]একটি নতুন / অনুলিপি করা ডেটাফ্রেম ফেরত দেবে। আপনি পরিবর্তন df1না করে সংশোধন করতে সক্ষম হবেন df। আপনাকে ধন্যবাদ, বিটিডব্লিউ। এটি আমার প্রয়োজন ঠিক ছিল।
বাজলি দেবোস্কি

4

আপনি df.pop ব্যবহার করতে পারেন ()

>>> df = pd.DataFrame([('falcon', 'bird',    389.0),
...                    ('parrot', 'bird',     24.0),
...                    ('lion',   'mammal',   80.5),
...                    ('monkey', 'mammal', np.nan)],
...                   columns=('name', 'class', 'max_speed'))
>>> df
     name   class  max_speed
0  falcon    bird      389.0
1  parrot    bird       24.0
2    lion  mammal       80.5
3  monkey  mammal 

>>> df.pop('class')
0      bird
1      bird
2    mammal
3    mammal
Name: class, dtype: object

>>> df
     name  max_speed
0  falcon      389.0
1  parrot       24.0
2    lion       80.5
3  monkey        NaN

এটি আপনার পক্ষে যদি সহায়তা করে তবে আমাকে জানান, df.pop (সি) ব্যবহার করুন


3

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

উদাহরণ

print(extracted_features.shape)
print(extracted_features)

(63,)
['f000004' 'f000005' 'f000006' 'f000014' 'f000039' 'f000040' 'f000043'
 'f000047' 'f000048' 'f000049' 'f000050' 'f000051' 'f000052' 'f000053'
 'f000054' 'f000055' 'f000056' 'f000057' 'f000058' 'f000059' 'f000060'
 'f000061' 'f000062' 'f000063' 'f000064' 'f000065' 'f000066' 'f000067'
 'f000068' 'f000069' 'f000070' 'f000071' 'f000072' 'f000073' 'f000074'
 'f000075' 'f000076' 'f000077' 'f000078' 'f000079' 'f000080' 'f000081'
 'f000082' 'f000083' 'f000084' 'f000085' 'f000086' 'f000087' 'f000088'
 'f000089' 'f000090' 'f000091' 'f000092' 'f000093' 'f000094' 'f000095'
 'f000096' 'f000097' 'f000098' 'f000099' 'f000100' 'f000101' 'f000103']

আমার কাছে নিম্নলিখিত তালিকা / নাম্পার অ্যারে রয়েছে 63৩ extracted_featuresটি কলাম নির্দিষ্ট করে। মূল ডেটাসেটে 103 কলাম রয়েছে এবং আমি ঠিক সেগুলি বের করতে চাই, তারপরে আমি ব্যবহার করব

dataset[extracted_features]

এবং আপনি এটি দিয়ে শেষ হবে

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

এই জিনিসটি আপনি প্রায়শই মেশিন লার্নিংয়ে ব্যবহার করবেন (আরও নির্দিষ্টভাবে, বৈশিষ্ট্য নির্বাচনের ক্ষেত্রে)। আমি অন্যান্য উপায়গুলি নিয়েও আলোচনা করতে চাই তবে আমি মনে করি এটি ইতিমধ্যে অন্যান্য স্ট্যাকওভারফ্লায়ার দ্বারা আবৃত। আশা করি এটি সহায়ক হয়েছে!


1

আপনি pandas.DataFrame.filterএই জাতীয় কলামগুলি ফিল্টার বা পুনঃক্রম করতে পদ্ধতি ব্যবহার করতে পারেন :

df1 = df.filter(['a', 'b'])

0
df[['a','b']] # select all rows of 'a' and 'b'column 
df.loc[0:10, ['a','b']] # index 0 to 10 select column 'a' and 'b'
df.loc[0:10, ['a':'b']] # index 0 to 10 select column 'a' to 'b'
df.iloc[0:10, 3:5] # index 0 to 10 and column 3 to 5
df.iloc[3, 3:5] # index 3 of column 3 to 5
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.