Saya ingin mendapatkan daftar tajuk kolom dari DataFrame panda. DataFrame akan berasal dari input pengguna jadi saya tidak akan tahu berapa banyak kolom akan ada atau apa namanya.
Misalnya, jika saya diberi DataFrame seperti ini:
>>> 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
Saya ingin mendapatkan daftar seperti ini:
>>> header_list
['y', 'gdp', 'cap']
columns
atribut?df.column_names()
. Apakah jawaban ini masih benar atau sudah usang?Ada metode bawaan yang merupakan yang paling performan:
.columns
mengembalikan Indeks,.columns.values
mengembalikan array dan ini memiliki fungsi pembantu.tolist
untuk mengembalikan daftar.Jika kinerja tidak terlalu penting bagi Anda,
Index
objek menentukan.tolist()
metode yang dapat Anda panggil secara langsung:Perbedaan kinerja jelas:
Bagi mereka yang membenci mengetik, Anda hanya dapat memanggil
list
padadf
, sebagai begitu:sumber
DataFrame
iterable tidak berubah sejak hari pertama: pandas.pydata.org/pandas-docs/stable/basics.html#iteration . Iterable yang dikembalikan dari DataFrame selalu menjadi kolom, jadi melakukan hal itufor col in df:
harus selalu berperilaku sama kecuali jika pengembang mengalami kehancuran sepertilist(df)
itu dan masih harus menjadi metode yang valid. Perhatikan bahwadf.keys()
memanggil implementasi internal struktur seperti dict mengembalikan kunci yang merupakan kolom. Downvotes yang tidak dapat dijelaskan adalah kerusakan jaminan yang diharapkan pada SO jadi jangan khawatircolumns
atribut. Satu jam yang lalu saya membaca tentang Hukum Demeter yang mempromosikan bahwa penelepon tidak boleh bergantung pada menavigasi model objek internal.list(df)
melakukan konversi tipe eksplisit. Efek samping yang penting: waktu eksekusi dan konsumsi memori meningkat dengandf.keys()
metode ukuran dataframe adalah bagian dari sifat dict-like aDataFrame
. Fakta penting: waktu eksekusidf.keys()
agak konstan terlepas dari ukuran dataframe - bagian dari tanggung jawab pengembang panda.Melakukan beberapa tes cepat, dan mungkin tidak mengherankan versi built-in yang digunakan
dataframe.columns.values.tolist()
adalah yang tercepat:(Aku masih sangat suka
list(dataframe)
, jadi terima kasih EdChum!)sumber
Menjadi lebih sederhana (oleh panda 0.16.0):
akan memberi Anda nama kolom dalam daftar yang bagus.
sumber
Untuk daftar kolom kerangka data saat dalam mode debugger, gunakan pemahaman daftar:
Omong-omong, Anda bisa mendapatkan daftar yang diurutkan hanya dengan menggunakan
sorted
:sumber
list(df)
hanya berfungsi dengan kerangka data peningkatan otomatis? Atau apakah itu berfungsi untuk semua kerangka data?[c for c in df]
.Terkejut saya belum melihat ini diposting sejauh ini, jadi saya akan meninggalkan ini di sini.
Extended Iterable Unpacking (python3.5 +):
[*df]
dan TemanGeneralisasi unpacking (PEP 448) telah diperkenalkan dengan Python 3.5. Jadi, semua operasi berikut ini dimungkinkan.
Jika Anda ingin
list
....Atau, jika Anda ingin
set
,Atau, jika Anda ingin
tuple
,Atau, jika Anda ingin menyimpan hasilnya di suatu tempat,
... jika Anda adalah tipe orang yang mengubah kopi menjadi suara mengetik, yah, ini akan mengonsumsi kopi Anda lebih efisien;)
Pemeriksaan Visual
Karena saya telah melihat ini dibahas dalam jawaban lain, Anda dapat memanfaatkan pembongkaran iterable (tidak perlu untuk loop eksplisit).
Kritik terhadap Metode Lain
Jangan gunakan
for
loop eksplisit untuk operasi yang dapat dilakukan dalam satu baris (Daftar pemahaman baik-baik saja).Selanjutnya, menggunakan
sorted(df)
tidak mempertahankan urutan asli kolom. Untuk itu, Anda harus menggunakannyalist(df)
.Berikutnya,
list(df.columns)
danlist(df.columns.values)
saran yang buruk (per versi saat ini, v0.24). BaikIndex
(dikembalikan daridf.columns
) dan array NumPy (dikembalikan olehdf.columns.values
) mendefinisikan.tolist()
metode yang lebih cepat dan lebih idiomatik.Terakhir, listification yaitu,
list(df)
seharusnya hanya digunakan sebagai alternatif ringkas untuk metode yang disebutkan sebelumnya untuk python <= 3,4 di mana perpanjangan pembongkaran tidak tersedia.sumber
Itu tersedia sebagai
my_dataframe.columns
.sumber
header_list = list(my_dataframe.columns)
df.columns.tolist()
.Ini menarik tetapi
df.columns.values.tolist()
hampir 3 kali lebih cepat dari itudf.columns.tolist()
tetapi saya pikir mereka sama:sumber
.values
mengembalikan array numpy yang mendasarinya, dan melakukan sesuatu dengan numpy hampir selalu lebih cepat daripada melakukan hal yang sama dengan panda secara langsung.Sebuah DataFrame berikut dict-seperti konvensi iterasi “kunci” dari objek tersebut.
Buat daftar kunci / kolom - metode objek
to_list()
dan cara pythonicIterasi dasar pada DataFrame mengembalikan label kolom
Jangan mengonversi DataFrame menjadi daftar, hanya untuk mendapatkan label kolom. Jangan berhenti berpikir sambil mencari contoh kode yang mudah.
sumber
df.columns
jauh lebih cepat daripadadf.keys()
. Tidak yakin mengapa mereka memiliki fungsi dan atribut untuk hal yang sama (yah, ini bukan pertama kalinya saya melihat 10 cara berbeda untuk melakukan sesuatu dalam panda).Di dalam Notebook
Untuk eksplorasi data di notebook IPython, cara pilihan saya adalah ini:
Yang akan menghasilkan daftar urutan abjad yang mudah dibaca.
Dalam repositori kode
Dalam kode saya merasa lebih eksplisit untuk dilakukan
Karena itu memberitahu orang lain membaca kode Anda apa yang Anda lakukan.
sumber
sorted(df)
mengubah urutan. Gunakan dengan hati-hati.sumber
seperti yang dijawab oleh Simeon Visser ... Anda bisa melakukannya
atau
Tapi saya pikir sebagian besar sweet spot adalah:
Ini eksplisit, pada saat yang sama tidak perlu terlalu lama.
sumber
list
tidak ada gunanya kecuali Anda memanggilnya secaradf
langsung (misalnya, keringkasan). Mengakses.columns
atribut mengembalikanIndex
objek yang memilikitolist()
metode yang ditentukan di atasnya, dan panggilan yang lebih idiomatis daripada mendaftarIndex
. Memadukan idiom hanya demi kelengkapan bukanlah ide bagus. Hal yang sama berlaku untuk daftar array yang Anda dapatkan.values
.Untuk pemeriksaan visual yang cepat, rapi, coba ini:
sumber
Ini memberi kami nama-nama kolom dalam daftar:
Fungsi lain yang disebut tolist () dapat digunakan juga:
sumber
Saya merasa pertanyaan layak mendapatkan penjelasan tambahan.
Seperti yang dicatat oleh @fixxxer, jawabannya tergantung pada versi panda yang Anda gunakan dalam proyek Anda. Yang bisa Anda dapatkan dengan
pd.__version__
perintah.Jika Anda karena alasan tertentu seperti saya (pada debian jessie saya menggunakan 0.14.1) menggunakan versi panda lebih lama dari 0.16.0, maka Anda perlu menggunakan:
df.keys().tolist()
karena belum adadf.columns
metode yang diterapkan.Keuntungan dari metode kunci ini adalah, bahwa ia berfungsi bahkan dalam versi panda yang lebih baru, sehingga lebih universal.
sumber
sumber
[n for n in dataframe.columns]
Meskipun solusi yang disediakan di atas bagus. Saya juga berharap sesuatu seperti frame.column_names () menjadi fungsi dalam panda, tetapi karena tidak, mungkin akan lebih baik menggunakan sintaks berikut. Entah bagaimana itu mempertahankan perasaan bahwa Anda menggunakan panda dengan cara yang tepat dengan memanggil fungsi "tolist": frame.columns.tolist ()
sumber
Jika DataFrame memiliki Indeks atau MultiIndex dan Anda ingin yang dimasukkan sebagai nama kolom juga:
Ini menghindari panggilan reset_index () yang memiliki kinerja yang tidak perlu untuk operasi sederhana.
Saya sering mengalami hal ini karena saya menggunakan data dari basis data tempat indeks dataframe dipetakan ke kunci primer / unik, tetapi sebenarnya hanyalah "kolom" bagi saya. Mungkin masuk akal jika panda memiliki metode bawaan untuk hal seperti ini (sangat mungkin saya melewatkannya).
sumber
Solusi ini mencantumkan semua kolom objek my_dataframe:
sumber