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


1013

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

উদাহরণস্বরূপ, যদি আমাকে এই জাতীয় ডেটা ফ্রেম দেওয়া হয়:

>>> my_dataframe
    y  gdp  cap
0   1    2    5
1   2    3    9
2   8    7    2
3   3    4    7
4   6    7    7
5   4    8    3
6   8    2    8
7   9    9   10
8   6    6    4
9  10   10    7

আমি এই জাতীয় একটি তালিকা পেতে চাই:

>>> header_list
['y', 'gdp', 'cap']

উত্তর:


1643

আপনি একটি তালিকা হিসাবে মানগুলি এটি দ্বারা পেতে পারেন:

list(my_dataframe.columns.values)

এছাড়াও আপনি সহজেই ব্যবহার করতে পারেন: (যেমন এড চমের উত্তরে দেখানো হয়েছে ):

list(my_dataframe)

42
কেন এই ডক নেই columnsএকটি বৈশিষ্ট্য হিসেবে?
টজোররিমোরারি

@ জোজুরিরিরি: আমি নিশ্চিত নই, তারা যেভাবে ডকুমেন্টেশন স্বয়ংক্রিয়ভাবে তৈরি করে তা নিয়ে এটি করা যেতে পারে। যদিও এটি অন্য জায়গাগুলিতে উল্লেখ করা হয়েছে: pandas.pydata.org/pandas-docs/stable/…
সিমন

8
আমি কিছু আশা করতে হবে df.column_names()। এই উত্তরটি এখনও সঠিক নাকি এটি পুরানো?
আলভাস

1
@ আলভাসে এটি করার বিভিন্ন উপায় রয়েছে (এই পৃষ্ঠায় অন্যান্য উত্তর দেখুন) তবে যতদূর আমি জানি যে তালিকা তৈরির জন্য সরাসরি ডেটাফ্রেমে কোনও পদ্ধতি নেই।
সিমন ভিউজার

19
গুরুত্বপূর্ণভাবে, এটি কলাম ক্রম সংরক্ষণ করে।
উইন্ডচাইমস 13

402

এখানে একটি বিল্ট ইন পদ্ধতি রয়েছে যা সর্বাধিক পারফর্ম্যান্ট:

my_dataframe.columns.values.tolist()

.columnsএকটি সূচক .columns.valuesফেরত দেয়, একটি অ্যারে প্রদান করে এবং এটি .tolistএকটি তালিকা ফেরত দেওয়ার জন্য একটি সহায়ক ফাংশন রয়েছে ।

যদি পারফরম্যান্স আপনার পক্ষে ততটা গুরুত্বপূর্ণ না হয় তবে Indexঅবজেক্টগুলি এমন একটি .tolist()পদ্ধতি নির্ধারণ করে যা আপনি সরাসরি কল করতে পারেন:

my_dataframe.columns.tolist()

কর্মক্ষমতা মধ্যে পার্থক্য সুস্পষ্ট:

%timeit df.columns.tolist()
16.7 µs ± 317 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit df.columns.values.tolist()
1.24 µs ± 12.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

যারা টাইপিং ঘৃণা জন্য, আপনি শুধু কল করতে পারেন listউপর df, তাই হিসাবে:

list(df)

4
ভোট হ্রাস করেনি, তবে ব্যাখ্যা করতে চান: বাস্তবায়নের বিশদগুলির উপর নির্ভর করবেন না, ডেটাফ্রেমের "পাবলিক ইন্টারফেস" ব্যবহার করুন। Df.keys () এর সৌন্দর্য সম্পর্কে চিন্তা করুন
সাশা গটফ্রাইড

3
@ স্যাশাগোটফ্রিড DataFrameপুনরাবৃত্তির বাস্তবায়ন প্রথম দিন থেকে পরিবর্তিত হয়নি: পান্ডাস.পিডিটা.আর.প্যানডাস-ডকস / স্টেবল / বেসিকস html#iteration । ডেটাফ্রেম থেকে ফিরে আসা পুনরাবৃত্তিটি সর্বদা কলাম হয়ে থাকে তাই for col in df:বিকাশকারীদের যদি মেল্টডাউন না list(df)থাকে এবং এখনও একটি বৈধ পদ্ধতি হওয়া উচিত তবে তা করা সর্বদা একই রকম হওয়া উচিত। নোটটি যে df.keys()কলামগুলি কীগুলি ফিরিয়ে দিচ্ছেন ডিকের মতো কাঠামোর অভ্যন্তরীণ বাস্তবায়নের দিকে আহ্বান জানিয়েছে।
অবর্ণনীয় ডাউনভোটগুলি

আমি columnsবৈশিষ্ট্যের বাস্তবায়ন বিশদটি উল্লেখ করছি ref ঘন্টাখানেক আগে আমি ল অফ ডিমিটার প্রচার করেছিলাম যে কলার অভ্যন্তরীণ বস্তু মডেল নেভিগেটের উপর নির্ভর করে না। list(df)সুস্পষ্ট ধরণের রূপান্তর করে। উল্লেখযোগ্য পার্শ্ব প্রতিক্রিয়া: ডেটাফ্রেম আকার df.keys()পদ্ধতির সাথে মৃত্যুদন্ড কার্যকর করার সময় এবং মেমরির খরচ বৃদ্ধি হ'ল ড এর মতো প্রকৃতির অংশ DataFrame। উল্লেখযোগ্য সত্য: df.keys()ডেটাফ্রেম আকার নির্বিশেষে মৃত্যুদন্ড কার্যকর করার সময় স্থির - প্যান্ডাস বিকাশকারীদের দায়িত্বের অংশ।
সাশা গটফ্রাইড

1
@ সাসাচাটফ্রিড আমি এটিকে আমার উত্তরটিতে যুক্ত করতে পারি এবং ক্রেডিট আপনি দেখতে পাচ্ছেন যে অন্য কেউ এটিকে অন্তর্ভুক্ত করেনি
এডচুম

1
আমি প্রদত্ত উত্তরের পাশাপাশি মন্তব্যেও মান দেখতে পাচ্ছি - কোনও কিছুর পরিবর্তন করার দরকার নেই।
স্যাশা গটফ্রাইড

89

কিছু দ্রুত পরীক্ষা করেছে, এবং সম্ভবত অবাক করে দিয়ে বিল্ট-ইন সংস্করণটি dataframe.columns.values.tolist()সবচেয়ে দ্রুত ব্যবহার করা হয়েছে:

In [1]: %timeit [column for column in df]
1000 loops, best of 3: 81.6 µs per loop

In [2]: %timeit df.columns.values.tolist()
10000 loops, best of 3: 16.1 µs per loop

In [3]: %timeit list(df)
10000 loops, best of 3: 44.9 µs per loop

In [4]: % timeit list(df.columns.values)
10000 loops, best of 3: 38.4 µs per loop

(আমি এখনও সত্য list(dataframe)যদিও এটি পছন্দ , তাই ধন্যবাদ এডচাম!)


47

এটি আরও সহজ হয়ে যায় (পান্ডাস 0.16.0 দ্বারা):

df.columns.tolist()

একটি সুন্দর তালিকায় আপনাকে কলামের নাম দেবে।


37
>>> list(my_dataframe)
['y', 'gdp', 'cap']

ডিবাগার মোডে থাকাকালীন একটি ডেটাফ্রেমের কলামগুলি তালিকা করতে, তালিকা বোঝার ব্যবহার করুন:

>>> [c for c in my_dataframe]
['y', 'gdp', 'cap']

উপায় দ্বারা, আপনি কেবল ব্যবহার করে একটি বাছাই করা তালিকা পেতে পারেন sorted:

>>> sorted(my_dataframe)
['cap', 'gdp', 'y']

এটি কি list(df)কেবল স্বতঃআগ্রহ ডেটাফ্রেমে কাজ করবে? বা এটি সমস্ত ডেটাফ্রেমের জন্য কাজ করে?
আলভাস

2
সবার জন্য কাজ করা উচিত। আপনি যখন ডিবাগারে থাকবেন, তবে আপনাকে তালিকা বোঝার প্রয়োজন [c for c in df]
আলেকজান্ডার

25

অবাক হয়ে আমি এখনও পর্যন্ত এই পোস্টটি দেখিনি, তাই আমি এই এখানেই রেখে দেব।

এক্সটেন্ডেড ইটারেবল আনপ্যাকিং (পাইথন 3.5 +): [*df]এবং বন্ধুরা

পাইপথন 3.5 এর সাথে আনপ্যাকিং জেনারালাইজেশন (পিইপি 448) চালু করা হয়েছে। সুতরাং, নিম্নলিখিত ক্রিয়াকলাপগুলি সমস্ত সম্ভব।

df = pd.DataFrame('x', columns=['A', 'B', 'C'], index=range(5))
df

   A  B  C
0  x  x  x
1  x  x  x
2  x  x  x
3  x  x  x
4  x  x  x 

আপনি যদি একটি list....

[*df]
# ['A', 'B', 'C']

বা, যদি আপনি একটি চান set,

{*df}
# {'A', 'B', 'C'}

বা, যদি আপনি একটি চান tuple,

*df,  # Please note the trailing comma
# ('A', 'B', 'C')

অথবা, আপনি যদি ফলাফলটি কোথাও সঞ্চয় করতে চান,

*cols, = df  # A wild comma appears, again
cols
# ['A', 'B', 'C']

... আপনি যদি সেই ধরণের ব্যক্তি যিনি কফিকে টাইপিং শব্দগুলিতে রূপান্তর করেন তবে ভাল, এটি আপনার কফিকে আরও দক্ষতার সাথে গ্রাস করছে;)

পিএস: যদি পারফরম্যান্স গুরুত্বপূর্ণ হয়, আপনি উপরোক্ত সমাধানগুলি পক্ষে যেতে চাইবেন

df.columns.to_numpy().tolist()
# ['A', 'B', 'C']

এটি এড চমের উত্তরের মতো , তবে v0.24 এর জন্য আপডেট হয়েছে যেখানে .to_numpy()ব্যবহারের ক্ষেত্রে অগ্রাধিকার দেওয়া হয় .values। দেখুন এই উত্তরটি আরও তথ্যের জন্য (আমার দ্বারা)।

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

print(*df)
A B C

print(*df, sep='\n')
A
B
C

অন্যান্য পদ্ধতির সমালোচনা

একটি সুস্পষ্ট ব্যবহার করবেন না forএকটি একক লাইনে করা যেতে পারে এমন ক্রিয়াকলাপের জন্য লুপ (তালিকার বোঝাপড়া ঠিক আছে)।

এর পরে, ব্যবহার করা sorted(df) মূল ক্রম সংরক্ষণ করে না কলামগুলির । তার জন্য, আপনার list(df)পরিবর্তে ব্যবহার করা উচিত ।

এরপরে list(df.columns)এবং list(df.columns.values)হ'ল নিম্ন পরামর্শ (বর্তমান সংস্করণ হিসাবে, v0.24)। উভয়ই Index(থেকে ফিরে df.columns) এবং নম্পপি অ্যারে (ফিরে এসেছেন)df.columns.values ) .tolist()পদ্ধতি নির্ধারণ করে যা দ্রুত এবং আরও মূর্তিযুক্ত।

শেষ অবধি, লিস্টিফিকেশন অর্থাত list(df)কেবল অজগর <= 3.4 এর জন্য পূর্বোক্ত পদ্ধতির সংক্ষিপ্ত বিকল্প হিসাবে ব্যবহার করা উচিত যেখানে বর্ধিত আনপ্যাকিং উপলব্ধ নেই।


24

যে হিসাবে উপলব্ধ my_dataframe.columns


1
এবং স্পষ্টভাবে একটি তালিকা হিসাবেheader_list = list(my_dataframe.columns)
yeliabsalohcin

^ অথবা আরও ভালো হয়: df.columns.tolist()
CS95

18

এটি আকর্ষণীয় তবে df.columns.values.tolist()প্রায় 3 গুণ বেশি দ্রুত df.columns.tolist()তবে আমি ভেবেছিলাম যে সেগুলি একই:

In [97]: %timeit df.columns.values.tolist()
100000 loops, best of 3: 2.97 µs per loop

In [98]: %timeit df.columns.tolist()
10000 loops, best of 3: 9.67 µs per loop

2
ইতিমধ্যে এই উত্তরটি অন্তর্ভুক্ত করা হয়েছে.valuesভিন্নতার কারণ হ'ল অন্তর্নিহিত নিম্পি অ্যারে ফিরিয়ে দেয়, এবং নিম্পির সাথে কিছু করা সরাসরি প্যান্ডাসের সাথে একই জিনিস করার চেয়ে প্রায় সর্বদা দ্রুত হয়।
সিএস 95

17

একটি ডেটা ফ্রেম অবজেক্টগুলির "কীগুলি" ধরে পুনরাবৃত্তি করার ডিকের মতো কনভেনশন অনুসরণ করে।

my_dataframe.keys()

কী / কলামগুলির তালিকা তৈরি করুন - অবজেক্ট পদ্ধতি to_list()এবং পাইথোনিক উপায়

my_dataframe.keys().to_list()
list(my_dataframe.keys())

কোনও ডেটাফ্রেমে প্রাথমিক পুনরাবৃত্তি কলাম লেবেলগুলি দেয়

[column for column in my_dataframe]

কোনও কলাম লেবেল পেতে কেবল কোনও ডেটা ফ্রেমকে তালিকায় রূপান্তর করবেন না। সুবিধাজনক কোডের নমুনাগুলি সন্ধান করার সময় চিন্তাভাবনা বন্ধ করবেন না

xlarge = pd.DataFrame(np.arange(100000000).reshape(10000,10000))
list(xlarge) #compute time and memory consumption depend on dataframe size - O(N)
list(xlarge.keys()) #constant time operation - O(1)

2
আমার পরীক্ষাগুলি শো df.columnsতুলনায় অনেক দ্রুত df.keys()। নিশ্চিত না কেন একই জিনিসটির জন্য তাদের একটি কার্যকারিতা এবং বৈশিষ্ট্য উভয়ই রয়েছে (ভাল, আমি প্রথমবার পাণ্ডায় কিছু করতে 10 টি ভিন্ন উপায় দেখিনি)।
সিএস 95

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

14

নোটবুকে

আইপিথন নোটবুকে ডেটা অনুসন্ধানের জন্য, আমার পছন্দের উপায়টি হ'ল:

sorted(df)

যা বর্ণানুক্রমিকভাবে অর্ডার করা তালিকাটি পড়া সহজ করে তোলে।

একটি কোড ভান্ডারে

কোডে আমি এটি করতে আরও সুস্পষ্ট মনে করি

df.columns

কারণ এটি আপনার কোডটি পড়া অন্যদেরকে বলে যে আপনি কী করছেন।


sorted(df)ক্রম পরিবর্তন। সতর্কতার সাথে ব্যবহার করুন.
সিএস 95

@ কোল্ডস্পিডে আমি এটি উল্লেখ করছি যদিও "যা বর্ণমালার অর্ডারযুক্ত তালিকাটি পড়া সহজ করে তোলে।"
অগ্নিনির্বাপক

9
%%timeit
final_df.columns.values.tolist()
948 ns ± 19.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
list(final_df.columns)
14.2 µs ± 79.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
list(final_df.columns.values)
1.88 µs ± 11.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
final_df.columns.tolist()
12.3 µs ± 27.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
list(final_df.head(1).columns)
163 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

3

সিমন ভিসার দ্বারা উত্তর হিসাবে ... আপনি করতে পারেন

list(my_dataframe.columns.values) 

অথবা

list(my_dataframe) # for less typing.

তবে আমার মনে হয় বেশিরভাগ মিষ্টি স্পটটি হ'ল:

list(my_dataframe.columns)

এটি সুস্পষ্ট, একই সাথে অযথা দীর্ঘ নয়।


"এটি সুস্পষ্ট, একই সাথে অযৌক্তিকভাবে দীর্ঘ নয়" " আমি একমত নই listআপনি dfসরাসরি এটিকে কল না করা পর্যন্ত কল করার কোনও যোগ্যতা নেই (উদাহরণস্বরূপ, সংক্ষিপ্ততা)। .columnsঅ্যাট্রিবিউট অ্যাক্সেস করে Indexএমন কোনও বস্তু দেয় যা এর উপরে একটি tolist()পদ্ধতি নির্ধারিত থাকে এবং কলটি যা প্রশংসিত করার চেয়ে মূর্তিমান Index। কেবলমাত্র সম্পূর্ণতার জন্য আইডিয়ামগুলি মিশ্রিত করা কোনও দুর্দান্ত ধারণা নয়। আপনার কাছ থেকে পাওয়া অ্যারেটি তুষ্ট করার জন্য একই কাজ .values
সিএস 95

3

দ্রুত, ঝরঝরে, ভিজ্যুয়াল চেকের জন্য এটি ব্যবহার করে দেখুন:

for col in df.columns:
    print col

3

এটি আমাদের একটি তালিকার কলামগুলির নাম দেয়:

list(my_dataframe.columns)

টোলিস্ট () নামে আর একটি ফাংশনও ব্যবহার করা যেতে পারে:

my_dataframe.columns.tolist()

এটি ইতিমধ্যে অন্যান্য উত্তরে hasাকা পড়েছে। আপনার প্রথম সমাধানটিও আইডিয়ামগুলিকে মিশ্রিত করে, এটি কোনও দুর্দান্ত ধারণা নয়। অন্য উত্তর অধীনে আমার মন্তব্য দেখুন ।
সিএস 95

2

আমি মনে করি প্রশ্ন অতিরিক্ত ব্যাখ্যা প্রাপ্য।

@ ফিক্সক্সিক্সার যেমন উল্লেখ করেছেন, উত্তরটি আপনার প্রকল্পে আপনি যে পান্ডাস সংস্করণ ব্যবহার করছেন তার উপর নির্ভর করে। যা আপনি পেতে পারেনpd.__version__ কমান্ড ।

আপনি যদি আমার মতো কোনও কারণে থাকেন (ডেবিয়ান জেসিতে আমি 0.14.1 ব্যবহার করি) 0.16.0 এর চেয়ে বেশি পুরানো সংস্করণ ব্যবহার করে তবে আপনাকে ব্যবহার করতে হবে:

df.keys().tolist() কারণ নেই df.columns এখনও পদ্ধতি প্রয়োগ করা হয়নি।

এই কী পদ্ধতির সুবিধাটি হ'ল এটি পান্ডার নতুন সংস্করণেও কাজ করে, তাই এটি আরও সর্বজনীন।


কীগুলির কন () হ'ল এটি কোনও বৈশিষ্ট্য অনুসন্ধানের চেয়ে ফাংশন কল, তাই এটি সর্বদা ধীর হতে চলেছে। অবশ্যই, ধ্রুবক সময় অ্যাক্সেসের সাথে, কেউ এই ধরণের পার্থক্য সম্পর্কে সত্যই চিন্তা করে না, তবে আমি মনে করি এটি যাইহোক উল্লেখ করার মতো; হেডারের অ্যাক্সেসের জন্য df.colالts এখন একটি সর্বজনীনভাবে স্বীকৃত আইডিয়াম।
সিএস 95

1
n = []
for i in my_dataframe.columns:
    n.append(i)
print n

6
দয়া করে এটি একটি তালিকা বোঝার সাথে প্রতিস্থাপন করুন।
সাসচা গটফ্রাইড

4
আপনার প্রথম 3 লাইন এতে পরিবর্তন করুন[n for n in dataframe.columns]
এন্টন প্রোটোপোপোভ 21

আপনি কোনও এক লাইনে সহজেই করতে পারেন এমন কোনও অপারেশনের জন্য আপনি কেন এই সমস্ত সমস্যার মধ্য দিয়ে যেতে চান?
সিএস 95

0

যদিও উপরে যে সমাধানটি সরবরাহ করা হয়েছিল তা দুর্দান্ত। আমি ফ্রেণ্ড.কলম_নাম () এর মতো কিছুও পাণ্ডায় একটি ফাংশন হিসাবে প্রত্যাশা করব, তবে যেহেতু এটি না, সম্ভবত নীচের বাক্য গঠনটি ব্যবহার করা ভাল লাগবে। এটি কোনওভাবে এই অনুভূতির সংরক্ষণ করে যে আপনি "টোলিস্ট" ফাংশন: ফ্রেম কোডলম্বস.টোলিস্ট () কল করে সঠিক উপায়ে পান্ডা ব্যবহার করছেন pre

frame.columns.tolist() 

0

যদি ডেটাফ্রেমের কোনও সূচি বা মাল্টিআইডেক্স হয় এবং আপনি কলামের নাম হিসাবে এটিও অন্তর্ভুক্ত করতে চান:

names = list(filter(None, df.index.names + df.columns.values.tolist()))

এটি রিসেট_ইন্ডেক্স () এ কল করা এড়ায় যা এরকম সাধারণ অপারেশনের জন্য একটি অপ্রয়োজনীয় পারফরম্যান্স হিট করে hit

আমি এটির প্রায়শই প্রয়োজন হয়ে পড়েছি কারণ আমি ডেটাবেসগুলি থেকে ডেটা শাটল করছি যেখানে ডেটাফ্রেম সূচকটি প্রাথমিক / অনন্য কীতে মানচিত্র করে তবে আমার কাছে এটি কেবল অন্য একটি "কলাম"। পান্ডার পক্ষে এই জাতীয় কোনও কিছুর জন্য অন্তর্নির্মিত পদ্ধতি থাকা (সম্ভবত এটি আমি মিস করেছি) বোধগম্য হবে।


-1

এই সমাধানটি আপনার অ্যাক্সেসের সমস্ত কলামগুলিকে my_dataframe তালিকাভুক্ত করে:

print(list(my_dataframe))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.