পান্ডাস ডেটা ফ্রেমে কলামগুলির ক্রম সেট করুন


103

আমার ব্যক্তিগত পছন্দের উপর ভিত্তি করে পান্ডাস ডেটাফ্রেমে কলামগুলি পুনরায় অর্ডার করার কোনও উপায় আছে (যেমন বর্ণানুক্রমিক বা সংখ্যাসমূহ অনুসারে বাছাই করা হয়নি, তবে কিছু নির্দিষ্ট সম্মেলনের অনুসরণের মতো)?

সাধারণ উদাহরণ:

frame = pd.DataFrame({
        'one thing':[1,2,3,4],
        'second thing':[0.1,0.2,1,2],
        'other thing':['a','e','i','o']})

এটি উত্পাদন করে:

   one thing other thing  second thing
0          1           a           0.1
1          2           e           0.2
2          3           i           1.0
3          4           o           2.0

তবে পরিবর্তে, আমি এটি চাই:

   one thing second thing  other thing
0          1           0.1           a
1          2           0.2           e
2          3           1.0           i
3          4           2.0           o

(দয়া করে এই ক্ষেত্রে নির্দিষ্ট না করে জেনেরিক সমাধান দিন Many অনেক ধন্যবাদ।)

উত্তর:


156

কলামের নাম লিখে টাইপ করে নিজেই অর্ডারটি নির্বাচন করুন। ডাবল বন্ধনী নোট করুন:

frame = frame[['column I want first', 'column I want second'...etc.]]

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

83

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

columnsTitles = ['onething', 'secondthing', 'otherthing']

frame = frame.reindex(columns=columnsTitles)

5
যদিও অন্যান্য বেশিরভাগ সমাধান আরও সংক্ষিপ্ত, আমি এটিকে যে কেউ 100% এর সাথে পরিচিত নয় তার পক্ষে সবচেয়ে পঠনযোগ্য বলে বিবেচনা করব pandas
শির্ক

3
কোনও পরিবর্তনশীলকে রিটার্ন মান নির্ধারণের কথা মনে রাখবেন, এটি কলামের স্থানে স্থান পরিবর্তন করে না (কমপক্ষে pandasv0.23` তে নয়)।
শির্ক

পরামর্শের জন্য ডির্ককে ধন্যবাদ
Okroshiashvili

33

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

আপনি যা করতে পারেন এবং সম্ভবত, আপনি যা করতে চান তা হ'ল আপনি ঘন ঘন ব্যবহার করা প্রথম কয়েকটি কলামটি অর্ডার করা এবং অন্যান্য সমস্ত কলামগুলি কেবল সেগুলি হয়ে। এটি আর তে একটি সাধারণ পন্থা isdf %>%select(one, two, three, everything())

সুতরাং আপনি প্রথমে ম্যানুয়ালি কলামগুলি টাইপ করতে পারেন যা আপনি অর্ডার করতে চান এবং তালিকায় থাকা সমস্ত অন্যান্য কলামের আগে অবস্থান করতে cols_to_order

তারপরে আপনি নতুন কলামগুলির জন্য বাকী কলামগুলিকে একত্রিত করে একটি তালিকা তৈরি করুন:

new_columns = cols_to_order + (frame.columns.drop(cols_to_order).tolist())

এর পরে, আপনি new_columnsপ্রস্তাবিত অন্যান্য সমাধান হিসাবে এটি ব্যবহার করতে পারেন ।

import pandas as pd
frame = pd.DataFrame({
    'one thing': [1, 2, 3, 4],
    'other thing': ['a', 'e', 'i', 'o'],
    'more things': ['a', 'e', 'i', 'o'],
    'second thing': [0.1, 0.2, 1, 2],
})

cols_to_order = ['one thing', 'second thing']
new_columns = cols_to_order + (frame.columns.drop(cols_to_order).tolist())
frame = frame[new_columns]

   one thing  second thing other thing more things
0          1           0.1           a           a
1          2           0.2           e           e
2          3           1.0           i           i
3          4           2.0           o           o

1
উজ্জ্বল, নিখুঁত। আমাকে প্রতিটি কলামের নাম বা সূচক টাইপ করা থেকে
বিরত

এটি সাধারণ উত্তর এবং গ্রহণযোগ্য উত্তর হওয়া উচিত
কার্লোস

26

আপনি যেমন কিছু করতে পারে df = df[['x', 'y', 'a', 'b']]

import pandas as pd
frame = pd.DataFrame({'one thing':[1,2,3,4],'second thing':[0.1,0.2,1,2],'other thing':['a','e','i','o']})
frame = frame[['second thing', 'other thing', 'one thing']]
print frame
   second thing other thing  one thing
0           0.1           a          1
1           0.2           e          2
2           1.0           i          3
3           2.0           o          4

এছাড়াও, আপনি কলামগুলির তালিকা এর সাথে পেতে পারেন:

cols = list(df.columns.values)

আউটপুট এরকম কিছু তৈরি করবে:

['x', 'y', 'a', 'b']

যা ম্যানুয়ালি পুনরায় সাজানো সহজ।


13

অভিধানের পরিবর্তে একটি তালিকা দিয়ে এটি তৈরি করুন

frame = pd.DataFrame([
        [1, .1, 'a'],
        [2, .2, 'e'],
        [3,  1, 'i'],
        [4,  4, 'o']
    ], columns=['one thing', 'second thing', 'other thing'])

frame

   one thing  second thing other thing
0          1           0.1           a
1          2           0.2           e
2          3           1.0           i
3          4           4.0           o

আমি 'কলামের নাম' পেতে পারি না: তালিকার অভ্যন্তরে কাজ করার জন্য ডেটা যেমন ডিক্টের মতো হয়।
কিম মিলার

10

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

In [183]: from collections import OrderedDict

In [184]: data = OrderedDict()

In [185]: data['one thing'] = [1,2,3,4]

In [186]: data['second thing'] = [0.1,0.2,1,2]

In [187]: data['other thing'] = ['a','e','i','o']

In [188]: frame = pd.DataFrame(data)

In [189]: frame
Out[189]:
   one thing  second thing other thing
0          1           0.1           a
1          2           0.2           e
2          3           1.0           i
3          4           2.0           o

6

'কলাম' পরামিতি যুক্ত করুন:

frame = pd.DataFrame({
        'one thing':[1,2,3,4],
        'second thing':[0.1,0.2,1,2],
        'other thing':['a','e','i','o']},
        columns=['one thing', 'second thing', 'other thing']
)

4

সূচিকাগুলি চেষ্টা করুন (যাতে আপনি কেবল এটির জন্য জেনেরিক সমাধান চান না, তাই সূচী আদেশটি আপনি যা চান ঠিক তেমন হতে পারে):

l=[0,2,1] # index order
frame=frame[[frame.columns[i] for i in l]]

এখন:

print(frame)

হল:

   one thing second thing  other thing
0          1           0.1           a
1          2           0.2           e
2          3           1.0           i
3          4           2.0           o

-2

আমি এটিকে সর্বাধিক সরল ও কাজকর্ম বলে মনে করি:

df = pd.DataFrame({
        'one thing':[1,2,3,4],
        'second thing':[0.1,0.2,1,2],
        'other thing':['a','e','i','o']})

df = df[['one thing','second thing', 'other thing']]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.