Ini kode saya untuk menghasilkan dataframe:
import pandas as pd
import numpy as np
dff = pd.DataFrame(np.random.randn(1,2),columns=list('AB'))
maka saya mendapatkan dataframe:
+------------+---------+--------+
| | A | B |
+------------+---------+---------
| 0 | 0.626386| 1.52325|
+------------+---------+--------+
Saat saya mengetik perintah:
dff.mean(axis=1)
Saya mendapatkan :
0 1.074821
dtype: float64
Menurut referensi panda, sumbu = 1 adalah singkatan dari kolom dan saya mengharapkan hasil dari perintah menjadi
A 0.626386
B 1.523255
dtype: float64
Jadi, inilah pertanyaan saya: apa arti sumbu dalam panda?
axis=0
menunjukkan agregasi di sepanjang baris danaxis=1
menunjukkan agregasi di sepanjang kolom adalah karena cara Anda mengindeks ke dalam kerangka data. Indf.iloc[row, column]
,row
berada di posisi indeks 0 dancolumn
berada di posisi indeks 1. Numpy menggeneralisasikan ini ke dimensi N, yang merupakan tempat berpikir dalam hal sumbu yang agregasi runtuh mulai lebih masuk akal daripada "baris-bijaksana" atau "bijaksana kolom" ".df.drop("A", axis = 1)
maka kolom A akan turun. Ini bukan "sepanjang baris" atau "bijaksana baris" tetapi menjatuhkan kolom A.axis=0
berarti setiap baris sebagai massal, kami hanya dapat memanipulasi DataFrame antar baris, bukan baris dalam.axis=1
berarti setiap kolom sebagai massal, kami hanya dapat memanipulasi DataFrame antar-kolom, bukan kolom-dalam. Jadi jika Anda menggunakandf.drop("A", axis = 1)
, itu akan menjatuhkan seluruh kolom.Jawaban-jawaban ini memang membantu menjelaskan hal ini, tetapi masih belum sepenuhnya intuitif untuk non-programmer (yaitu seseorang seperti saya yang sedang belajar Python untuk pertama kalinya dalam konteks kursus ilmu data). Saya masih menemukan menggunakan istilah "sepanjang" atau "untuk masing-masing" wrt ke baris dan kolom menjadi membingungkan.
Yang lebih masuk akal bagi saya adalah mengatakannya seperti ini:
Jadi rata-rata pada sumbu 0 akan menjadi rata-rata dari semua baris di setiap kolom, dan rata-rata pada sumbu 1 akan menjadi rata-rata dari semua kolom di setiap baris.
Pada akhirnya ini mengatakan hal yang sama dengan @zhangxaochen dan @Michael, tetapi dengan cara yang lebih mudah bagi saya untuk menginternalisasi.
sumber
Mari kita visualisasikan (Anda akan selalu ingat),
Dalam panda:
Misalkan, untuk melakukan operasi concat () pada dataframe1 & dataframe2, kami akan mengambil dataframe1 & mengambil baris ke-1 dari dataframe1 dan menempatkannya ke DF baru, kemudian kami mengambil baris lain dari dataframe1 dan dimasukkan ke dalam DF baru, kami ulangi proses ini sampai kita mencapai bagian bawah dataframe1. Kemudian, kami melakukan proses yang sama untuk dataframe2.
Pada dasarnya, susun dataframe2 di atas dataframe1 atau sebaliknya.
Misalnya membuat tumpukan buku di atas meja atau lantai
Misalkan, untuk melakukan operasi concat () pada dataframe1 & dataframe2, kami akan mengeluarkan kolom lengkap 1 (alias seri 1) dari dataframe1 dan menempatkannya ke DF baru, kemudian kami mengambil kolom kedua dari dataframe1 dan tetap bersebelahan dengannya (menyamping) ) , kita harus mengulangi operasi ini sampai semua kolom selesai. Kemudian, kami mengulangi proses yang sama pada dataframe2. Pada dasarnya, susun dataframe2 ke samping.
Misalnya mengatur buku di rak buku.
sumber
axis
mengacu pada dimensi array, dalam kasuspd.DataFrame
saxis=0
adalah dimensi yang menunjuk ke bawah danaxis=1
yang menunjuk ke kanan.Contoh: Pikirkan
ndarray
bentuk dengan(3,5,7)
.a
adalah 3 dimensindarray
, yaitu memiliki 3 sumbu ("sumbu" adalah jamak dari "sumbu"). Konfigurasia
akan terlihat seperti 3 iris roti di mana setiap irisan adalah dimensi 5-oleh-7.a[0,:,:]
akan merujuk pada irisan ke-0,a[1,:,:]
akan merujuk pada irisan ke-1 dll.a.sum(axis=0)
akan berlakusum()
sepanjang sumbu ke-0 daria
. Anda akan menambahkan semua irisan dan berakhir dengan satu irisan bentuk(5,7)
.a.sum(axis=0)
setara denganb
dana.sum(axis=0)
keduanya akan terlihat seperti iniDalam a
pd.DataFrame
, sumbu bekerja dengan cara yang sama seperti dalamnumpy.array
s:axis=0
akan berlakusum()
atau fungsi reduksi lainnya untuk setiap kolom.NB Dalam jawaban @ zhangxaochen, saya menemukan frasa "sepanjang baris" dan "di sepanjang kolom" sedikit membingungkan.
axis=0
harus merujuk ke "sepanjang setiap kolom", danaxis=1
"di sepanjang setiap baris".sumber
Cara termudah bagi saya untuk mengerti adalah berbicara tentang apakah Anda menghitung statistik untuk setiap kolom (
axis = 0
) atau setiap baris (axis = 1
). Jika Anda menghitung statistik, katakan mean, denganaxis = 0
Anda akan mendapatkan statistik itu untuk setiap kolom. Jadi jika setiap pengamatan adalah baris dan setiap variabel dalam kolom, Anda akan mendapatkan rata-rata dari setiap variabel. Jika Anda mengaturaxis = 1
maka Anda akan menghitung statistik Anda untuk setiap baris. Dalam contoh kami, Anda akan mendapatkan rata-rata untuk setiap pengamatan di semua variabel Anda (mungkin Anda ingin rata-rata ukuran terkait).axis = 0
: dengan kolom = kolom-bijaksana = di sepanjang barisaxis = 1
: dengan baris = baris-bijaksana = di sepanjang kolomsumber
axis=0
kita tidak tinggal di baris katakan kapan, katakanlah, menghitung mean; alih-alih kita pergi ke semua baris dalam kolom.Mari kita lihat tabel dari Wiki. Ini adalah perkiraan IMF untuk PDB dari 2010 hingga 2019 untuk sepuluh negara teratas.
1. Sumbu 1 akan berlaku untuk setiap baris pada semua kolom
Jika Anda ingin menghitung rata-rata (rata-rata) PDB untuk masing-masing negara selama satu dekade (2010-2019), Anda perlu melakukannya
df.mean(axis=1)
,. Misalnya, jika Anda ingin menghitung rata-rata PDB Amerika Serikat dari 2010 hingga 2019,df.loc['United States','2010':'2019'].mean(axis=1)
2. Sumbu 0 akan berlaku untuk setiap kolom pada semua baris
Jika saya ingin menghitung rata-rata (rata-rata) PDB untuk setiap tahun untuk semua negara, Anda harus melakukan
df.mean(axis=0)
,. Misalnya, jika Anda ingin menghitung PDB rata-rata tahun 2015 untuk Amerika Serikat, Cina, Jepang, Jerman, dan India,df.loc['United States':'India','2015'].mean(axis=0)
Catatan: Kode di atas hanya akan berfungsi setelah menetapkan kolom "Negara (atau wilayah dependen)" sebagai Indeks, menggunakan
set_index
metode.sumber
Sumbu dalam pandangan pemrograman adalah posisi dalam bentuk tuple. Berikut ini sebuah contoh:
Berarti pada sumbu akan menyebabkan dimensi itu dihapus.
Mengacu pada pertanyaan awal, bentuk dff adalah (1,2). Menggunakan sumbu = 1 akan mengubah bentuk ke (1,).
sumber
Perancang panda, Wes McKinney, dulu bekerja secara intensif pada data keuangan. Pikirkan kolom sebagai nama stok dan indeks sebagai harga harian. Anda kemudian dapat menebak apa perilaku default (yaitu,
axis=0
) sehubungan dengan data keuangan ini.axis=1
dapat dengan mudah dianggap sebagai 'arah yang lain'.Sebagai contoh, statistik fungsi, seperti
mean()
,sum()
,describe()
,count()
semua default kolom-bijaksana karena lebih masuk akal untuk melakukannya untuk setiap saham.sort_index(by=)
juga default ke kolom.fillna(method='ffill')
akan mengisi kolom karena itu adalah stok yang sama.dropna()
default ke baris karena Anda mungkin hanya ingin membuang harga pada hari itu daripada membuang semua harga saham itu.Demikian pula, pengindeksan tanda kurung siku mengacu pada kolom karena lebih umum untuk memilih saham daripada memilih sehari.
sumber
salah satu cara mudah untuk mengingat sumbu 1 (kolom), vs sumbu 0 (baris) adalah output yang Anda harapkan.
sumber
pd.concat
ataudf.dropna()
, yang menggunakan sumbu kewarg dalam lebih dari kapasitas identifikasi.Masalah dengan menggunakan dengan
axis=
benar adalah untuk penggunaannya untuk 2 kasus berbeda:Gagasan utama di balik jawaban ini adalah untuk menghindari kebingungan, kami memilih salah satu angka , atau nama untuk menentukan sumbu tertentu, mana yang lebih jelas, intuitif, dan deskriptif.
Panda didasarkan pada NumPy, yang didasarkan pada matematika, terutama pada matriks n-dimensi. Berikut adalah gambar untuk penggunaan umum nama sumbu dalam matematika dalam ruang 3 dimensi:
Gambar ini hanya untuk mengingat nomor urut sumbu saja:
0
untuk sumbu x,1
untuk sumbu y, dan2
untuk sumbu z.The z-axis hanya untuk panel ; untuk kerangka data, kami akan membatasi minat kami pada bidang dasar 2 dimensi berwarna hijau dengan sumbu x (
0
, vertikal) , dan sumbu y (1
, horizontal).Itu semua untuk angka sebagai nilai potensial dari
axis=
parameter.Nama - nama sumbu adalah
'index'
(Anda dapat menggunakan alias'rows'
) dan'columns'
, dan untuk penjelasan ini TIDAK penting hubungan antara nama-nama ini dan nomor urut (dari sumbu), karena semua orang tahu apa arti kata "baris" dan "kolom" ( dan semua orang di sini - saya kira - tahu apa arti kata "indeks" dalam panda).Dan sekarang, rekomendasi saya:
Jika Anda ingin menghitung nilai akumulasi , Anda dapat menghitungnya dari nilai yang terletak di sepanjang sumbu 0 (atau sepanjang sumbu 1 ) - gunakan
axis=0
(atauaxis=1
).Demikian pula, jika Anda ingin mengatur ulang nilai , gunakan nomor sumbu dari sumbu, di sepanjang itu terdapat data untuk mengatur ulang (misalnya untuk menyortir ).
Jika Anda ingin memanipulasi (misalnya, menyatukan ) entitas (misalnya, kerangka data ) - gunakan
axis='index'
(sinonim :)axis='rows'
atauaxis='columns'
untuk menentukan perubahan yang dihasilkan - indeks ( baris ) atau kolom , masing-masing.(Untuk penggabungan , Anda akan mendapatkan indeks yang lebih panjang (= lebih banyak baris) , atau lebih banyak kolom , masing-masing.)
sumber
Ini berdasarkan jawaban @ Safak. Cara terbaik untuk memahami sumbu dalam panda / numpy adalah membuat array 3d dan memeriksa hasil dari fungsi penjumlahan di sepanjang 3 sumbu yang berbeda.
a akan:
Sekarang periksa jumlah elemen array di sepanjang masing-masing sumbu:
akan memberi Anda hasil berikut:
sumber
Saya mengerti seperti ini:
Katakanlah jika operasi Anda memerlukan traverse dari kiri ke kanan / kanan ke kiri dalam bingkai data, Anda tampaknya menggabungkan kolom. Anda beroperasi di berbagai kolom. Ini adalah sumbu = 1
Contoh
Demikian pula, jika operasi Anda memerlukan lintasan dari atas ke bawah / bawah ke atas dalam kerangka data, Anda menggabungkan baris. Ini adalah sumbu = 0 .
sumber
sumbu = 0 berarti atas ke bawah sumbu = 1 berarti kiri ke kanan
Contoh yang diberikan adalah mengambil jumlah semua data dalam kolom == kunci.
sumber
Pemikiran saya: Sumbu = n, di mana n = 0, 1, dll. Berarti bahwa matriks diciutkan (dilipat) di sepanjang sumbu itu. Jadi dalam matriks 2D, ketika Anda runtuh sepanjang 0 (baris), Anda benar-benar beroperasi pada satu kolom pada suatu waktu. Demikian pula untuk matriks pesanan yang lebih tinggi.
Ini tidak sama dengan referensi normal ke dimensi dalam matriks, di mana 0 -> baris dan 1 -> kolom. Demikian pula untuk dimensi lain dalam larik dimensi N.
sumber
Saya seorang pemula untuk panda. Tapi ini adalah bagaimana saya memahami sumbu dalam panda:
Arah Memvariasikan Sumbu Konstan
0 Baris Kolom Ke Bawah |
1 Baris Kolom Menuju Kanan ->
Jadi untuk menghitung rata-rata kolom, kolom tertentu itu harus konstan tetapi baris di bawahnya dapat berubah (bervariasi) sehingga sumbu = 0.
Demikian pula, untuk menghitung rata-rata baris, baris tertentu itu konstan tetapi dapat melintasi kolom yang berbeda (bervariasi) , sumbu = 1.
sumber
Saya pikir ada cara lain untuk memahaminya.
Untuk np.array, jika kita ingin menghilangkan kolom kita menggunakan sumbu = 1; jika kita ingin menghilangkan baris, kita menggunakan sumbu = 0.
Untuk objek panda,
axis = 0
singkatan dari operasi baris-bijaksana danaxis = 1
singkatan dari operasi kolom-bijaksana. Ini berbeda darinumpy
definisi, kita dapat memeriksa definisi dari numpy.doc dan pandas.docsumber
Saya akan secara eksplisit menghindari penggunaan 'bijaksana baris' atau 'sepanjang kolom', karena orang mungkin menafsirkannya dengan cara yang salah.
Analogi dulu. Secara intuitif, Anda akan mengharapkan yang
pandas.DataFrame.drop(axis='column')
menjatuhkan kolom dari N kolom dan memberi Anda (N - 1) kolom. Jadi Anda tidak dapat memperhatikan baris untuk saat ini (dan menghapus kata 'baris' dari kamus bahasa Inggris Anda.) Begitu juga sebaliknya,drop(axis='row')
berfungsi pada baris.Dengan cara yang sama,
sum(axis='column')
bekerja pada banyak kolom dan memberi Anda 1 kolom. Demikian pula,sum(axis='row')
menghasilkan 1 baris. Ini konsisten dengan bentuk definisi yang paling sederhana, mengurangi daftar angka menjadi angka tunggal.Secara umum, dengan
axis=column
, Anda melihat kolom, mengerjakan kolom, dan mendapatkan kolom. Lupakan baris.Dengan
axis=row
, ubah perspektif dan kerjakan baris.0 dan 1 hanya alias untuk 'baris' dan 'kolom'. Ini adalah konvensi pengindeksan matriks.
sumber
pd.concat
dengan penjelasan Anda, itu tidak berhasil. Bisakah Anda menjelaskan perilaku concat dengan 2 sumbu tolong? Terima kasih.Saya telah mencoba mencari tahu poros selama satu jam terakhir juga. Bahasa dalam semua jawaban di atas, dan juga dokumentasi sama sekali tidak membantu.
Untuk menjawab pertanyaan seperti yang saya mengerti sekarang, di Panda, sumbu = 1 atau 0 berarti header sumbu mana yang ingin Anda pertahankan konstan ketika menerapkan fungsi.
Catatan: Saat saya mengucapkan tajuk, maksud saya adalah nama indeks
Memperluas contoh Anda:
Untuk sumbu = 1 = kolom: Kami menjaga header kolom konstan dan menerapkan fungsi rata-rata dengan mengubah data. Untuk menunjukkan, kami menjaga header kolom konstan seperti:
Sekarang kita mengisi satu set nilai A dan B dan kemudian menemukan mean
Kemudian kita mengisi set nilai A dan B berikutnya dan menemukan rerata
Demikian pula, untuk sumbu = baris, kami menjaga header baris tetap, dan terus mengubah data: Untuk menunjukkan, pertama-tama perbaiki header baris:
Sekarang isi set pertama nilai X dan Y dan kemudian temukan rerata
Kemudian mengisi set nilai X dan Y berikutnya dan kemudian menemukan mean:
Singkatnya,
Saat sumbu = kolom, Anda memperbaiki header kolom dan mengubah data, yang akan datang dari baris yang berbeda.
Saat sumbu = baris, Anda memperbaiki header baris dan mengubah data, yang akan datang dari kolom yang berbeda.
sumber
axis = 1, Ini akan memberikan jumlah baris yang bijaksana, keepdims = True akan mempertahankan dimensi 2D. Semoga ini bisa membantu Anda.
sumber
Banyak jawaban di sini banyak membantu saya!
Jika Anda bingung dengan perilaku yang berbeda
axis
dalam Python danMARGIN
dalam R (seperti dalamapply
fungsi), Anda dapat menemukan posting blog yang saya tulis menarik: https://accio.github.io/programming/2020/05// 19 / numpy-panda-axis.html .Intinya:
numpy
danpandas
, parameter sumbu dalam jumlah sebenarnya menentukan numpy untuk menghitung rata-rata semua nilai yang dapat diambil dalam bentuk array [0, 0, ..., i, ..., 0] di mana saya mengulangi semua nilai yang mungkin. Proses ini diulangi dengan posisi i fix dan indeks dimensi lain bervariasi satu demi satu (dari elemen paling kanan). Hasilnya adalah array n-1-dimensi.apply
fungsi menghitung rata-rata semua nilai yang dapat diambil dalam bentuk array [, ..., i, ...,] di mana saya mengulangi semua nilai yang mungkin. Proses tidak diulangi ketika semua nilai i telah diulang. Karena itu, hasilnya adalah vektor sederhana.sumber
Array dirancang dengan apa yang disebut sumbu = 0 dan baris diposisikan secara vertikal versus sumbu = 1 dan kolom diposisikan secara horizontal. Sumbu mengacu pada dimensi array.
sumber
axis=0
berarti setiap baris sebagai massal, kami hanya dapat memanipulasi DataFrame antar-baris, bukan baris dalam.axis=1
berarti setiap kolom sebagai massal, kami hanya dapat memanipulasi DataFrame antar-kolom, bukan kolom-dalam.