Saya ingin mendapatkan daftar kolom header dari panda DataFrame. Yang DataFrame akan datang dari input user jadi saya tidak't tahu berapa banyak kolom yang akan ada atau apa yang mereka akan disebut.
Sebagai contoh, jika saya'm diberikan 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']
Anda bisa mendapatkan nilai-nilai sebagai daftar dengan melakukan:
list(my_dataframe.columns.values)
Juga anda hanya dapat menggunakan: (seperti yang ditunjukkan dalam Ed Sohib's jawaban):
list(my_dataframe)
Ada yang dibangun di metode yang paling performant:
my_dataframe.columns.values.tolist()
.kolom
mengembalikan Indeks, .kolom.nilai-nilai
mengembalikan array dan fungsi pembantu .kedaftar
untuk kembali ke daftar.
Jika kinerja tidak begitu penting bagi anda, Index
benda-benda yang mendefinisikan .kedaftar()
metode yang anda dapat menghubungi langsung:
my_dataframe.columns.tolist()
Perbedaan dalam kinerja yang lebih jelas:
%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)
Untuk orang-orang yang membenci mengetik, anda hanya dapat memanggil daftar
pada df
, seperti:
list(df)
Melakukan beberapa tes cepat, dan mungkin tidak mengejutkan versi built-in menggunakan dataframe.kolom.nilai-nilai.kedaftar()
adalah yang tercepat:
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
(Saya masih benar-benar seperti daftar(dataframe)
meskipun, jadi terima kasih EdChum!)
>>> list(my_dataframe)
['y', 'gdp', 'cap']
Untuk daftar kolom yang dataframe sementara dalam mode debugger, menggunakan daftar pemahaman:
>>> [c for c in my_dataframe]
['y', 'gdp', 'cap']
By the way, anda bisa mendapatkan daftar diurutkan hanya dengan menggunakan diurutkan
:
>>> sorted(my_dataframe)
['cap', 'gdp', 'y']
It's menarik tapi df.kolom.nilai-nilai.kedaftar()
hampir 3 kali lebih cepat maka df.kolom.kedaftar()
tapi saya berpikir bahwa mereka adalah sama:
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
Terkejut aku belum't melihat ini diposting sejauh ini, jadi saya'll hanya meninggalkan ini di sini.
[*df]
dan teman-TemanMembongkar generalisasi (PEP 448) telah diperkenalkan dengan Python 3.5. Jadi, operasi berikut yang mungkin.
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
<!- >
Jika anda ingin daftar
....
[*df]
# ['A', 'B', 'C']
Atau, jika anda ingin set
,
{*df}
# {'A', 'B', 'C'}
Atau, jika anda ingin tupel
,
*df, # Please note the trailing comma
# ('A', 'B', 'C')
Atau, jika anda ingin menyimpan hasil ke suatu tempat,
*cols, = df # A wild comma appears, again
cols
# ['A', 'B', 'C']
... jika anda're tipe orang yang bertobat kopi untuk mengetik suara, nah, ini akan mengkonsumsi kopi anda lebih efisien ;)
P. S.: jika kinerja adalah penting, anda akan ingin untuk parit solusi di atas dalam mendukung
df.kolom.to_numpy().kedaftar()
['A', 'B', 'C']
Ini adalah mirip dengan Ed Sohib's jawaban, tapi diperbarui untuk v0.24 di mana
.to_numpy()
lebih disukai untuk penggunaan.nilai-nilai
. Lihat jawaban (by me) untuk informasi lebih lanjut.
Pemeriksaan Visual Karena saya've melihat ini dibahas dalam jawaban yang lain, anda dapat memanfaatkan iterable membongkar (tidak perlu secara eksplisit loop).
print(*df)
A B C
print(*df, sep='\n')
A
B
C
Don't menggunakan eksplisit untuk
loop untuk sebuah operasi yang dapat dilakukan dalam satu baris (Daftar pemahaman yang baik-baik saja).
Selanjutnya, dengan menggunakan diurutkan(df)
tidak mempertahankan urutan asli kolom. Untuk itu, anda harus menggunakan daftar(df)
sebagai gantinya.
Berikutnya, daftar(df.kolom)
dan daftar(df.kolom.nilai-nilai)
miskin saran (seperti versi saat ini, v0.24). Kedua Index
(kembali dari df.kolom
) dan NumPy array (dikembalikan oleh df.kolom.nilai-nilai
) mendefinisikan .kedaftar()
metode yang lebih cepat dan lebih idiomatik.
Terakhir, listification yaitu, daftar(df)
hanya boleh digunakan sebagai ringkas alternatif untuk metode tersebut.
A DataFrame mengikuti dict-seperti konvensi iterasi "kunci" dari benda-benda.
my_dataframe.keys()
Membuat daftar kunci/kolom - objek metode to_list()
dan pythonic cara
my_dataframe.keys().to_list()
list(my_dataframe.keys())
Dasar iterasi pada DataFrame kembali kolom label
[column for column in my_dataframe]
Tidak mengkonversi DataFrame ke dalam daftar, hanya untuk mendapatkan label kolom. Jangan berhenti berpikir sambil mencari penginapan kode sampel.
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)
Untuk data eksplorasi di IPython notebook, saya lebih suka cara ini:
sorted(df)
Yang akan menghasilkan suatu yang mudah untuk membaca daftar abjad memerintahkan.
Dalam kode saya menemukan hal yang lebih eksplisit untuk melakukan
df.columns
Karena memberitahu orang lain yang membaca kode anda apa yang anda lakukan.
%%waktuhal final_df.kolom.nilai-nilai.kedaftar() 948 ns ± 19.2 ns per loop (berarti ± std. dev. 7 berjalan, 1000000 loop masing-masing)
%%waktuhal daftar(final_df.kolom) 14.2 µs ± 79.1 ns per loop (berarti ± std. dev. 7 berjalan, 100000 loop masing-masing)
%%waktuhal daftar(final_df.kolom.nilai-nilai) 1.88 µs ± 11.7 ns per loop (berarti ± std. dev. 7 berjalan, 1000000 loop masing-masing)
%%waktuhal final_df.kolom.kedaftar() 12.3 µs ± 27.4 ns per loop (berarti ± std. dev. 7 berjalan, 100000 loop masing-masing)
%%waktuhal daftar(final_df.kepala(1).kolom) 163 µs ± 20.6 µs per loop (berarti ± std. dev. 7 berjalan, 10000 loop masing-masing)
seperti yang dijawab oleh Simeon Visser...anda bisa melakukan
list(my_dataframe.columns.values)
atau
list(my_dataframe) # for less typing.
Tapi saya pikir paling sweet spot adalah:
list(my_dataframe.columns)
Hal ini secara eksplisit, pada saat yang sama tidak perlu lama.
Saya merasa pertanyaan layak penjelasan tambahan.
Seperti @fixxxer mencatat, jawabannya tergantung pada panda versi yang anda gunakan dalam proyek anda.
Yang dapat anda dapatkan dengan pd.__versi__
perintah.
Jika anda untuk beberapa alasan seperti saya (pada debian jessie saya menggunakan 0.14.1) menggunakan versi yang lebih tua dari panda dari 0.16.0, maka anda perlu menggunakan:
df.kunci-kunci().kedaftar()
karena tidak ada df.kolom
metode yang dilaksanakan belum.
Keuntungan dari ini kunci metode ini, bahwa ia bekerja bahkan pada versi terbaru dari panda, jadi itu's lebih universal.
Meskipun solusi yang diberikan di atas adalah bagus. Saya juga akan mengharapkan sesuatu seperti bingkai.column_names() untuk menjadi sebuah fungsi di panda, tapi karena itu adalah tidak, mungkin akan lebih baik untuk menggunakan sintaks berikut. Entah bagaimana mempertahankan perasaan bahwa anda menggunakan panda dengan cara yang tepat dengan memanggil "kedaftar" fungsi: bingkai.kolom.kedaftar()
frame.columns.tolist()