পাইথন পান্ডসে কলামের নাম থেকে কলাম সূচক পান


220

আর এ যখন আপনাকে করতে পারে তার কলামের নামের উপর ভিত্তি করে একটি কলাম সূচক পুনরুদ্ধার করতে হবে

idx <- which(names(my_data)==my_colum_name)

পান্ডাস ডেটাফ্রেমগুলির সাথে একই করার কি কোনও উপায় আছে?

উত্তর:


360

অবশ্যই, আপনি ব্যবহার করতে পারেন .get_loc():

In [45]: df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]})

In [46]: df.columns
Out[46]: Index([apple, orange, pear], dtype=object)

In [47]: df.columns.get_loc("pear")
Out[47]: 2

যদিও সত্যি কথা বলতে আমি প্রায়ই নিজের প্রয়োজন হয় না। সাধারণত নাম দ্বারা অ্যাক্সেস আমি যা চাই তা করতে পারে ( df["pear"], df[["apple", "orange"]]বা সম্ভবত df.columns.isin(["orange", "pear"])), যদিও আপনি অবশ্যই সূচি নম্বর চাইবেন এমন ক্ষেত্রে আমি অবশ্যই দেখতে পাচ্ছি।


7
.ilocঅপারেটরটি ব্যবহার করার সময় কলাম নম্বরটি কার্যকর , যেখানে আপনাকে উভয় সারি এবং কলামের জন্য কেবল পূর্ণসংখ্যা পাস করতে হবে।
এবি

4
অথবা লাইব্রেরিগুলি ব্যবহার করার সময় যা ডিএফ একটি বিশেষ বৈশিষ্ট্যযুক্ত কলামের সূচিত অ্যারে এবং সূচকগুলিতে রূপান্তর করতে চায়। উদাহরণস্বরূপ CatBoost শ্রেণিবদ্ধ বৈশিষ্ট্যগুলির সূচকগুলির একটি তালিকা চায়।
টম ওয়াকার

1
এক্সেল রাইটারের সাথে ওয়ার্কশিট তৈরি করার পরে শর্তসাপেক্ষ্য বিন্যাস যুক্ত করার সময় আমার এটি দরকার হয়েছিল। আমাকে তাদের এক্সেল স্থানাঙ্কগুলির দ্বারা কলামগুলি (এবং সেলগুলি) উল্লেখ করতে হবে।
আলেজান্দ্রো

সাবপ্লটগুলির একটি অ্যারে তৈরি করার সময় আমি এটি ব্যবহার করি। প্রতিটি কলামে ডেটা থেকে একটি সাবপ্লট।
ডেভিড কলিন্স

2
আমি insertবিদ্যমান কলামের পরে যখন নতুন কলাম করতে চাই তখন আমি এটি ব্যবহার করি ।
আমির এ। শাবানী

33

তালিকা অনুধাবন মাধ্যমে একটি সমাধান এখানে। কলামগুলি সূচক পেতে কলামগুলির তালিকা:

[df.columns.get_loc(c) for c in cols if c in df]

4
যেহেতু colsকম উপাদানগুলি নেই df.columns, করছেন for c in cols if c in dfদ্রুততর হবে।
এরিক ও লেবিগোট

15

ডিএসএমের সমাধান কাজ করে তবে আপনি যদি সরাসরি ডাইরেক্ট সমেত চান তবে এটি whichকরতে পারতেন(df.columns == name).nonzero()


10

আপনি যখন একাধিক কলামের মিল খুঁজে পাচ্ছেন, তখন searchsortedপদ্ধতি ব্যবহার করে একটি ভেক্টরাইজড সমাধান ব্যবহার করা যেতে পারে। সুতরাং, dfডেটাফ্রেম query_colsহিসাবে এবং কলামের নামগুলি অনুসন্ধান করা হিসাবে, একটি বাস্তবায়ন হবে -

def column_index(df, query_cols):
    cols = df.columns.values
    sidx = np.argsort(cols)
    return sidx[np.searchsorted(cols,query_cols,sorter=sidx)]

নমুনা রান -

In [162]: df
Out[162]: 
   apple  banana  pear  orange  peach
0      8       3     4       4      2
1      4       4     3       0      1
2      1       2     6       8      1

In [163]: column_index(df, ['peach', 'banana', 'apple'])
Out[163]: array([4, 1, 0])

8

আপনি যদি কলামের অবস্থানটি কলামের অবস্থান থেকে (ওপি প্রশ্নে অন্য উপায়) চান তবে আপনি ব্যবহার করতে পারেন:

>>> df.columns.get_values()[location]

@ ডিএসএম উদাহরণ ব্যবহার করে:

>>> df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]})

>>> df.columns

Index(['apple', 'orange', 'pear'], dtype='object')

>>> df.columns.get_values()[1]

'orange'

অন্যান্য উপায়:

df.iloc[:,1].name

df.columns[location] #(thanks to @roobie-nuby for pointing that out in comments.) 

2
শুধু কেন নয় df.columns[location]?
রুবি নবী

1

এটি সম্পর্কে:

df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]})
out = np.argwhere(df.columns.isin(['apple', 'orange'])).ravel()
print(out)
[1 2]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.