Pandalardaki eksen ne anlama geliyor?


269

İşte benim veri çerçevesi oluşturmak için benim kod:

import pandas as pd
import numpy as np

dff = pd.DataFrame(np.random.randn(1,2),columns=list('AB'))

sonra veri çerçevesi var:

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------+---------
|      0     | 0.626386| 1.52325|
+------------+---------+--------+

Komutu yazdığımda:

dff.mean(axis=1)

Bende var :

0    1.074821
dtype: float64

Pandaların referansına göre, eksen = 1 sütunları temsil eder ve komutun sonucunun

A    0.626386
B    1.523255
dtype: float64

İşte sorum: pandalardaki eksen ne anlama geliyor?

Yanıtlar:


382

Bu eksen belirttiğinde hangi boyunca araçlar hesaplanır. Varsayılan olarak axis=0. Bu, satırlar boyunca (yani pandalarda dizin ) ve sütunlar boyunca açıkça belirtildiğinde ( varsayılan olarak , eksen == Varsayılan olarak, düzleştirilmiş dizi üzerinden ortalama değeri hesaplayan) numpy.meankullanımla tutarlıdır . Daha fazla netlik için, kişi (yerine ) veya (yerine ) belirtmeyi seçebilir .axisnumpy.meanaxis=0axis=1axis='index'axis=0axis='columns'axis=1

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------+---------
|      0     | 0.626386| 1.52325|----axis=1----->
+------------+---------+--------+
             |         |
             | axis=0  |
                      

164
Genellikle eksen = 0'ın "sütun-bilge" olduğu söylenir (ve eksen = 1 "satır-bilge"), bence "satırlar boyunca" kafa karıştırıcıdır. (Güzel "pic" olsa :))
Andy Hayden

11
@AndyHayden evet, ama belki de her ikisi de ilk kez karşılaşanlara biraz kafa karıştırıcıdır;)
zhangxaochen

43
Ayrıca, axis=0satırlar boyunca toplamayı ve axis=1sütunlar boyunca toplamayı gösteren neden, bir veri çerçevesine nasıl indekslediğinizdir. İçinde df.iloc[row, column], rowindeks konumunda 0 ve columnindeks konumunda 1'dir. Numpy bunu N boyutlarına genelleştirir, bu da toplamanın çöktüğü eksen açısından düşünmenin "satır-bilge" veya "sütun-bilge" den daha anlamlı olmaya başladığı yerdir. ".
Tom Q.

11
Hala kafa karıştırıcı hissediyorum. Bunu yaparsam df.drop("A", axis = 1)A sütunu bırakılır. "Satır boyunca" ne de "satır-bilge" değil, A sütunu düşüyor
ytu

5
@ytu axis=0, her satırın bir yığın olduğu anlamına gelir, yalnızca DataFrame satırlar arası iç satır yerine değiştirebiliriz. axis=1her sütun toplu olarak ifade edildiğinde, yalnızca iç sütun yerine DataFrame sütununu değiştirebiliriz. Yani kullanırsanız df.drop("A", axis = 1), bir sütunun tamamını bırakır.
Belter

106

Bu cevaplar bunu açıklamaya yardımcı olur, ancak programcı olmayan biri için (yani benim gibi veri bilimi dersleri bağlamında ilk kez Python'u öğrenen biri) sezgisel değildir. Hala satır ve sütun kafa karıştırıcı olmak için "along" veya "her" wrt terimlerini kullanarak bulmak.

Benim için daha mantıklı olan şey şöyle söylemek:

  • Eksen 0, her bir SÜTUN içindeki tüm SATIRLARA etki eder
  • Eksen 1, her bir SATIR'daki tüm SÜTUNLARA etki edecektir

Dolayısıyla, 0 eksenindeki bir ortalama, her sütundaki tüm satırların ortalaması olacaktır ve 1 eksenindeki bir ortalama, her satırdaki tüm sütunların ortalaması olacaktır.

Sonuçta bu @zhangxaochen ve @Michael ile aynı şeyi söylüyor, ama benim için içselleştirmem daha kolay.


Bence karışıklık, her bir "eylem" in karmaşıklığından kaynaklanıyor. df.dropna (eksen = 0) önce her bir SATIR'daki tüm SÜTUNLARI kontrol eder ve daha sonra bu SATIRLARI boş bırakır. Eksen son adımdan bahsediyor, ancak beynimiz ilk kısma odaklanacak.
Shawn Chen

69

Görselleştirelim (her zaman hatırlayacaksınız), resim açıklamasını buraya girin

Pandalarda:

  1. axis = 0, "indexes" boyunca anlamına gelir. Bu, bilge bir operasyon .

Diyelim ki, dataframe1 ve dataframe2 üzerinde concat () işlemini gerçekleştirmek için dataframe1'i alacağız ve dataframe1'den 1. satırı çıkaracağız ve yeni DF'ye yerleştireceğiz, sonra dataframe1'den başka bir satır alıp yeni DF'ye koyacağız, bu işlemi tekrar edeceğiz veri çerçevesinin altına ulaşıyoruz1. Sonra aynı işlemi dataframe2 için yapıyoruz.

Temel olarak, dataframe2'yi dataframe1'in üstüne istifleme veya tersi.

Örneğin, bir masa veya zeminde bir yığın kitap yapmak

  1. eksen = 1 "sütunlar" boyunca anlamına gelir. Bu sütun bazında bir işlem.

Diyelim ki, dataframe1 ve dataframe2 üzerinde concat () işlemini gerçekleştirmek için dataframe1'in 1. tam sütununu (1. seri olarak da bilinir) çıkaracağız ve yeni DF'ye yerleştireceğiz, sonra dataframe1'in ikinci sütununu çıkarıp bitişik kalacağız (yana doğru) ) , tüm sütunlar bitene kadar bu işlemi tekrarlamamız gerekir. Sonra aynı işlemi dataframe2 üzerinde tekrarlıyoruz. Temel olarak, veri çerçevesi2 yan yana istifleme.

Örneğin kitaplık üzerinde kitap düzenleme.

Dahası, diziler iç içe n-boyutlu bir yapıyı temsil etmek için matrislere göre daha iyi temsil olduklarından! böylece aşağıda, birden fazla boyuta genelleme yaptığınızda eksenin nasıl önemli bir rol oynadığını görselleştirmenize yardımcı olabilirsiniz. Ayrıca, herhangi bir n-dim dizisini yazdırabilir / yazabilir / çizebilir / görselleştirebilirsiniz, ancak bunu 3 boyutludan daha büyük bir kağıda bir matris temsilinde (3-dim) yazmak veya görselleştirmek imkansızdır.

resim açıklamasını buraya girin


6
Bence bu cevap doğru. Görselleştirmeniz gerekiyor. axis = 0 (veya axis = 'row' 'yatay eksendir. axis = 1 (veya axis =' column ') dikey eksendir.Panda yöntemini bırak yöntemini kullanırsanız, belirtmek isterseniz sütunları veya satırları kaldırmak için axis = 1 sütunları sileceksiniz. axis = 0'ı belirtirseniz, satırları veri kümesinden kaldırırsınız. Dolayısıyla, df: df.drop (0, axis = 0) değişkeninde bazı panda veri çerçevesi varsa, tüm ilk satırı kaldıracaktır. dataset df.drop ('grades', axis = 1) 'veri' sütununu veri kümesinden kaldıracaktır Umarım bu biraz daha
açıklar

3
@Roboblob - hala kafa karıştırıcı. df.drop (n, eksen = 1) bir sütuna etki eder. Df.mean (axis = 1) neden bir sütun üzerinde işlem yapmıyor?
mat

@matty, önce! Ellerinizi kirletin !, çok basit. Referans, düşüş ve ortalama , eksen = 1 her ikisi için de aynıdır, örneğin örneğinizde bir şey anlamadıysanız lütfen yeni bir soru sorun!
Anu

2
@anu - eller kirli mi? SO'yu yinelenen sorularla karıştırmaya gerek yok. Bu karışıklığı azaltmak için bu sayfadaki bir veya daha fazla yanıtın netleştirilebileceğinden eminim. Yapabilirsem kendim yaparım, ama şimdilik sadece onları nasıl kullanacağımı biliyorum. İstediğim verileri elde etmek için hangi eksenin kullanılacağını anlıyorum. Bununla birlikte, ortalama () ve drop () 'un neden zıt eksenleri etkiliyor gibi hissettiklerine dair kafa karışıklığı devam etmektedir.
Matty

2
Korkarım bu cevap inanılmaz derecede kafa karıştırıcı. Satırlar üzerinde eksen = 0 olarak hareket etmekten bahsediyorsunuz, ancak sütunlara inen kırmızı oklar çiziyorsunuz. Sütunlar üzerinde hareket eden eksen = 1 hakkında konuşuyorsunuz, ancak bir sıra boyunca oklar çiziyorsunuz. Kim bu sisteme geldiğini çok iyi düşünmüyordu.
rocksNwaves

33

axisdizinin boyutuna karşılık gelir, pd.DataFrames durumunda axis=0aşağıya ve axis=1sağa işaret eden boyuttur .

Örnek:ndarray şeklinde bir düşünün (3,5,7).

a = np.ones((3,5,7))

a3 boyutludur ndarray, yani 3 ekseni vardır ("eksen", "eksen" in çoğuludur). Konfigürasyonu, aher dilimin 5 x 7 boyutunda olduğu 3 dilim ekmek gibi görünecektir. a[0,:,:]0. dilimi, a[1,:,:]1. dilimi ifade eder vs.

a.sum(axis=0)sum()öğesinin 0'ıncı ekseni boyunca uygulanır a. Tüm dilimleri ekleyecek ve bir dilim şekille sonuçlanacaksınız (5,7).

a.sum(axis=0) eşittir

b = np.zeros((5,7))
for i in range(5):
    for j in range(7):
        b[i,j] += a[:,i,j].sum()

bve a.sum(axis=0)ikisi de böyle görünecek

array([[ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.]])

Bir de pd.DataFrame, eksenleri aynı olduğu gibi şekilde çalışır numpy.array: s axis=0geçerli olacaktır sum()veya her sütun için başka azaltma işlevi.

Not @ zhangxaochen cevap olarak, "satır boyunca" ve "sütunlar boyunca" ifadeleri biraz kafa karıştırıcı buluyorum. axis=0"her sütun boyunca" ve axis=1"her satır boyunca" ifadelerini kullanmalıdır.


1
Bu, kabul edilen yanıttan daha iyi bir cevaptır - Safak'tan bahsedildiği gibi, kullanılan ifadeler zayıf ifadelere sahiptir ve daha fazla karışıklığa neden olur.
javadba

Bu daha iyi cevaptır
Ravi G

24

Anlamamın en kolay yolu, her sütun ( axis = 0) veya her satır ( axis = 1) için bir istatistik hesaplayıp hesaplamadığınız hakkında konuşmaktır . Bir istatistik hesaplarsanız, bir ortalama söyleyin, axis = 0her bir sütun için bu istatistiki alırsınız. Her gözlem bir satırsa ve her değişken bir sütundaysa, her bir değişkenin ortalamasını alırsınız. Eğer ayarlarsanız axis = 1o zaman her satır için İstatistiğinizi hesaplar. Örneğimizde, tüm değişkenlerinizdeki her gözlem için ortalama elde edersiniz (belki ilgili ölçümlerin ortalamasını istersiniz).

axis = 0: by column = column-wise = satırlar boyunca

axis = 1: by row = row-wise = sütunlar boyunca


Bence "along" yerine "karşısında" değiştirilmesi gerekir. Bana bir şey (örneğin yol) gitmek, onun üzerinde kalmak anlamına gelir, ama axis=0demek istediğimiz zaman demek istediğimiz satırda kalmayız; bunun yerine bir sütundaki tüm satırlara gideriz.
Şaşkın

13

Wiki'den tabloya bakalım. Bu, ilk on ülke için 2010'dan 2019'a kadar olan GSYİH tahminidir. resim açıklamasını buraya girin

1. Eksen 1, tüm sütunlardaki her satır için geçerli olacaktır
On yılda (2010-2019) her ülke için ortalama (ortalama) GSYİH'yi hesaplamak istiyorsanız, yapmanız gerekir df.mean(axis=1). Örneğin, 2010-2019 arasında ABD'nin ortalama GSYİH'sını hesaplamak istiyorsanız,df.loc['United States','2010':'2019'].mean(axis=1)

2. Eksen 0, tüm satırlarda her sütun için geçerli olacaktır
. Tüm ülkeler için her yıl için ortalama (ortalama) GSYİH'yi hesaplamak istiyorsam, yapmanız gerekir df.mean(axis=0). Örneğin, Amerika Birleşik Devletleri, Çin, Japonya, Almanya ve Hindistan için 2015 yılının ortalama GSYİH'sını hesaplamak istiyorsanız, df.loc['United States':'India','2015'].mean(axis=0)

Not: Yukarıdaki kod yalnızca "Ülke (veya bağımlı bölge)" sütununu Dizin olarak ayarladıktan sonra çalışır. set_indexyöntem.


11

Programlamadaki eksen, şekil demetindeki konumdur. İşte bir örnek:

import numpy as np

a=np.arange(120).reshape(2,3,4,5)

a.shape
Out[3]: (2, 3, 4, 5)

np.sum(a,axis=0).shape
Out[4]: (3, 4, 5)

np.sum(a,axis=1).shape
Out[5]: (2, 4, 5)

np.sum(a,axis=2).shape
Out[6]: (2, 3, 5)

np.sum(a,axis=3).shape
Out[7]: (2, 3, 4)

Eksendeki ortalama, bu boyutun kaldırılmasına neden olur.

Orijinal soruya bakıldığında, dff şekli (1,2) 'dir. Eksen = 1 kullanıldığında şekli (1,) olarak değiştirir.


8

Panda tasarımcısı Wes McKinney, finans verileri üzerinde yoğun olarak çalışıyordu. Sütunları hisse senedi adları ve endeksleri günlük fiyatlar olarak düşünün. Daha sonra axis=0bu finans verileriyle ilgili varsayılan davranışın ne olduğunu (yani ) tahmin edebilirsiniz . axis=1basitçe 'diğer yön' olarak düşünülebilir.

Örneğin, gibi istatistik fonksiyonları, mean(), sum(), describe(), count()kolona-bilge için tüm varsayılan her hisse senedi için bunları yapmak için daha mantıklı çünkü. sort_index(by=)ayrıca varsayılan sütun. fillna(method='ffill')Aynı stok olduğu için sütun boyunca doldurulur. dropna()varsayılan olarak sıraya girer, çünkü muhtemelen o hisse senedinin tüm fiyatlarını atmak yerine o günkü fiyatı silmek istersiniz.

Benzer şekilde, köşeli parantez endeksleme sütunları ifade eder, çünkü bir gün seçmek yerine bir hisse senedi seçmek daha yaygındır.


1
muhakemeniz kulağa doğru geliyor ancak ortalama (), sum () ve diğer işlevler varsayılan olarak (eksen = 0) 'dır. Row-wise sütun-bilge beklediğimiz gibi davranıyor gibi görünüyor :) ve bu karışıklık gibi görünüyor.
bincob

5

eksen 1'i (sütunlar), eksen 0'a (satırlar) karşı hatırlamanın kolay yollarından biri de beklediğiniz çıktıdır.

  • her satır için bir çıktı bekliyorsanız axis = 'column',
  • diğer taraftan her sütun için bir çıktı istiyorsanız axis = 'rows' kullanırsınız.

Teşekkürler. Ancak bu yalnızca hesaplama için işe yarıyor değil mi? Kewarg eksenini bir tanımlama kapasitesinde kullanan pd.concatveya gibi yöntemler için işe yaramaz df.dropna().
Bowen Liu

3

axis=Düzgün kullanım sorunu, 2 ana durum için kullanılmasıdır:

  1. Birikmiş bir değeri hesaplamak veya verileri yeniden düzenlemek (örn. Sıralama) için.
  2. İçin manipüle (ile "oynamak") kuruluşlar (örn dataframes ).

Bu cevabın arkasındaki ana fikir, karışıklığı önlemek için , hangi ekseni daha net, sezgisel ve açıklayıcı olarak belirlemek için bir sayı veya bir isim seçmemizdir.

Pandalar matematiğe, özellikle n-boyutlu matrislere dayanan NumPy'ye dayanır. İşte 3 boyutlu alanda matematikte eksen adlarının ortak kullanımı için bir resim:

resim açıklamasını buraya girin Bu resim sadece eksenlerin sıra sayılarını ezberlemek içindir:

  • 0 x ekseni için,
  • 1 y ekseni için ve
  • 2 z ekseni için.

Z ekseni için sadece paneller ; için dataframes yeşil renkli, bizim ilgi sınırlar 2 boyutlu temel düzlem ile x-ekseni ( 0dikey) ve y-ekseni ( 1yatay).

resim açıklamasını buraya girin Her şey parametrenin potansiyel değerleri olarak sayılar içindiraxis= .

İsimler eksenlerinin olan 'index'(eğer takma ad kullanabilirsiniz 'rows') ve 'columns've bu açıklama için bu isimler ve sıra sayıları arasındaki ilişki önemli değil herkesin bildiği gibi (eksenlerin), hangi kelimelerle "satırlarında" ve "sütunlarının" ortalama ( ve buradaki herkes - sanırım - pandalardaki “indeks” kelimesinin ne anlama geldiğini biliyor ).

Ve şimdi, benim tavsiyem:

  1. Eğer istersen bir birikmiş değerini hesaplamak , bulunduğunuz değerlerden hesaplayabilir olabilir eksen 0 boyunca (veya eksen 1 boyunca kullanım -) axis=0(veya axis=1).

    İstersen Benzer şekilde, değerleri yeniden düzenlemek , kullanmak eksen numarası , eksenin hangi boyunca (örn için yeniden düzenleyerek için veri bulunduğu sıralama ).

  2. İsterseniz manipüle (örn concatenate ) kişiler (örneğin dataframes kullanımı -) axis='index': (eşanlamlı axis='rows'ya) axis='columns'belirtmek için çıkan değişim - endeksi ( satırlar ) ya da sütunlar sırasıyla.
    ( Birleştirme için , sırasıyla daha uzun bir dizin (= daha fazla satır) veya daha fazla sütun elde edersiniz .)


bu en iyi cevaptır ve muhtemelen op tarafından doğru cevap olarak işaretlenmelidir!
Anze

2

Bu @ Şafak'ın cevabına dayanıyor. Pandalar / numpy'deki eksenleri anlamanın en iyi yolu, bir 3d dizi oluşturmak ve toplam fonksiyonun sonucunu 3 farklı eksen boyunca kontrol etmektir.

 a = np.ones((3,5,7))

a olacak:

    array([[[1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.]],

   [[1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.]],

   [[1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.]]])

Şimdi, her bir eksen boyunca dizideki öğelerin toplamına bakın:

 x0 = np.sum(a,axis=0)
 x1 = np.sum(a,axis=1)
 x2 = np.sum(a,axis=2)

size aşağıdaki sonuçları verecektir:

   x0 :
   array([[3., 3., 3., 3., 3., 3., 3.],
        [3., 3., 3., 3., 3., 3., 3.],
        [3., 3., 3., 3., 3., 3., 3.],
        [3., 3., 3., 3., 3., 3., 3.],
        [3., 3., 3., 3., 3., 3., 3.]])

   x1 : 
   array([[5., 5., 5., 5., 5., 5., 5.],
   [5., 5., 5., 5., 5., 5., 5.],
   [5., 5., 5., 5., 5., 5., 5.]])

  x2 :
   array([[7., 7., 7., 7., 7.],
        [7., 7., 7., 7., 7.],
        [7., 7., 7., 7., 7.]])

2

Bu şekilde anlıyorum:

İşleminizin bir veri çerçevesinde soldan sağa / sağdan sola geçiş yapması gerekiyorsa, görünüşe göre sütunları birleştirdiğinizi varsayalım. çeşitli sütunlar üzerinde çalışıyorsunuz. Bu eksen = 1

Misal

df = pd.DataFrame(np.arange(12).reshape(3,4),columns=['A', 'B', 'C', 'D'])
print(df)
   A  B   C   D
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11 

df.mean(axis=1)

0    1.5
1    5.5
2    9.5
dtype: float64

df.drop(['A','B'],axis=1,inplace=True)

    C   D
0   2   3
1   6   7
2  10  11

Burada dikkat edilmesi gereken nokta sütunlar üzerinde çalıştığımızdır

Benzer şekilde, işleminiz bir veri çerçevesinde yukarıdan aşağıya / aşağıdan yukarıya doğru geçiş gerektiriyorsa , satırları birleştiriyorsunuz demektir. Bu eksen = 0'dır .


1

eksen = 0 aşağı yukarı anlamına gelir eksen = 1 soldan sağa anlamına gelir

sums[key] = lang_sets[key].iloc[:,1:].sum(axis=0)

Verilen örnek, == anahtar sütunundaki tüm verilerin toplamıdır.


0

Benim düşüncem: Eksen = n, burada n = 0, 1, vb. Matrisin o eksen boyunca daraltıldığı (katlandığı) anlamına gelir. 2B bir matriste, 0 (satır) boyunca daralttığınızda, her seferinde tek bir sütun üzerinde işlem yapıyorsunuzdur. Benzer şekilde yüksek mertebeden matrisler için.

Bu, 0 -> satır ve 1 -> sütununun bulunduğu bir matristeki bir boyuta normal başvuru ile aynı değildir. Benzer şekilde bir N boyut dizisindeki diğer boyutlar için.


0

Ben pandalara yeniyim. Ama pandalardaki ekseni şu şekilde anlıyorum:


Eksen Sabit Değişken Yönü


0 Sütun Satırı Aşağıya |


1 Satır Sütun Sağa Doğru ->


Bu nedenle, bir sütunun ortalamasını hesaplamak için, belirli bir sütun sabit olmalıdır, ancak bunun altındaki satırlar , eksen = 0 olacak şekilde değişebilir ( değişebilir ) .

Benzer şekilde, bir satırın ortalamasını hesaplamak için, belirli bir satır sabittir, ancak farklı sütunlar (değişen) , eksen = 1 arasında geçiş yapabilir.


0

Bunu anlamanın başka bir yolu olduğunu düşünüyorum.

Bir np.array için, sütunları ortadan kaldırmak istiyorsak axis = 1; satırları ortadan kaldırmak istiyorsak, eksen = 0 kullanırız.

np.mean(np.array(np.ones(shape=(3,5,10))),axis = 0).shape # (5,10)
np.mean(np.array(np.ones(shape=(3,5,10))),axis = 1).shape # (3,10)
np.mean(np.array(np.ones(shape=(3,5,10))),axis = (0,1)).shape # (10,)

Pandalar nesnesi axis = 0için satır-bilge işlemi ve axis = 1sütun-bilge işlemi anlamına gelir. Bu numpytanımdan farklıdır , numpy.doc ve pandas.doc tanımlarını kontrol edebiliriz


0

Açıkça 'satır-bilge' veya 'sütunlar boyunca' kullanmaktan kaçınacağım, çünkü insanlar bunları tam olarak yanlış bir şekilde yorumlayabilir.

Önce benzetme. Sezgisel olarak, bunun pandas.DataFrame.drop(axis='column')N sütunlarından bir sütun bırakıp (N - 1) sütunlar vermesini beklersiniz . Şimdilik satırlara HİÇBİR BAKABİLİRSİNİZ (ve 'satır' kelimesini İngilizce sözlüğünüzden kaldırabilirsiniz.) Tam tersi, drop(axis='row')satırlar üzerinde çalışır.

Aynı şekilde, sum(axis='column')birden çok sütun üzerinde çalışır ve size 1 sütun verir. Benzer şekilde, sum(axis='row')1 satır ile sonuçlanır. Bu, en basit tanım şekliyle tutarlıdır ve sayı listesini tek bir sayıya indirir.

Genel olarak, axis=columnsütunları görür, sütunlar üzerinde çalışır ve sütunları alırsınız. Satırları unutun.

İle axis=rowperspektifi değiştirin ve satırlar üzerinde çalışın.

0 ve 1, yalnızca 'satır' ve 'sütun' için takma adlardır. Matris indeksleme kuralıdır.


Bu yorum axis = 'column' kullanılarak doğru değil size sütun vermez.
user3065757

@ user3065757 Yorumlar için teşekkürler. Lütfen örneklerle açıklar mısınız?
lqu

Kime cevap verdiğiniz değil pd.concat, açıklamanızla anlamaya çalıştığımda , pek işe yaramaz. 2 eksen ile concat davranışını açıklayabilir misiniz lütfen? Teşekkürler.
Bowen Liu

@BowenLiu 2 elmalı listeyi birleştirdiğinizde, 1 daha fazla elma listesi alırsınız (ancak daha büyük elmalar değil). Satırları birleştirdiğinizde (eksen = 0), daha fazla satır alırsınız (daha uzun satırlar değil); sütunları birleştirdiğinizde (eksen = 1), daha fazla sütun alırsınız (artık sütun değil). Fikir eksen = 0, bir satır içinde değil, satırlar arasında çalışır.
lqu

0

Son bir saat boyunca ekseni de anlamaya çalışıyorum. Yukarıdaki tüm cevaplardaki dil ve ayrıca belgeler hiç yardımcı olmuyor.

Soruyu şimdi anladığım gibi cevaplamak için, Pandalar'da, eksen = 1 veya 0 , işlevi uygularken hangi eksen başlıklarının sabit kalmasını istediğiniz anlamına gelir .

Not: Üstbilgiler dediğimde dizin adlarını kastediyorum

Örneğinizi genişletmek:

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------+---------
|      X     | 0.626386| 1.52325|
+------------+---------+--------+
|      Y     | 0.626386| 1.52325|
+------------+---------+--------+

Eksen = 1 = sütunlar için: Sütun başlıklarını sabit tutarız ve verileri değiştirerek ortalama işlevi uygularız. Göstermek için sütun başlıklarını şu şekilde sabit tutarız:

+------------+---------+--------+
|            |  A      |  B     |

Şimdi bir set A ve B değeri doldurup ortalamayı buluyoruz

|            | 0.626386| 1.52325|  

Sonra bir sonraki A ve B değerleri kümesini doldururuz ve ortalamayı buluruz

|            | 0.626386| 1.52325|

Benzer şekilde, eksen = satırlar için satır başlıklarını sabit tutarız ve verileri değiştirmeye devam ederiz: Göstermek için önce satır başlıklarını düzeltin:

+------------+
|      X     |
+------------+
|      Y     |
+------------+

Şimdi ilk X ve Y değerleri kümesini doldurun ve ardından ortalamayı bulun

+------------+---------+
|      X     | 0.626386
+------------+---------+
|      Y     | 0.626386
+------------+---------+

Sonra bir sonraki X ve Y değerleri kümesini doldurun ve ardından ortalamayı bulun:

+------------+---------+
|      X     | 1.52325 |
+------------+---------+
|      Y     | 1.52325 |
+------------+---------+

Özetle,

Axis = column olduğunda, sütun başlıklarını düzeltir ve farklı satırlardan gelecek verileri değiştirirsiniz.

Axis = row olduğunda, satır başlıklarını düzeltir ve farklı sütunlardan gelen verileri değiştirirsiniz.


0

resim açıklamasını buraya girin

resim açıklamasını buraya girin

eksen = 1, toplam satırını akıllıca verecektir, keepdims = True 2D boyutunu koruyacaktır. Umarım size yardımcı olur.


OP değil ama teşekkürler. Bence insanların bu konudaki karışıklığının büyük bir kısmı, Pandas'ın belgeselinde eksen = 1 sütunlara karşılık geliyor. Ancak, burada 'satır-bilge' hesaplama yapıyor.
Bowen Liu

0

Buradaki birçok cevap bana çok yardımcı oldu!

axisPython ve MARGINR'deki ( applyişlevdeki gibi ) farklı davranışları ile karışırsanız , ilgilendiğim bir blog yazısı bulabilirsiniz: https://accio.github.io/programming/2020/05/ 19 / numpy-pandas-axis.html .

Özünde:

  • Davranışları ilgi çekici bir şekilde, üç boyutlu dizi ile anlaşılması iki boyutlu dizilerden daha kolaydır.
  • Python paketlerinde numpyve pandastoplamındaki axis parametresi, i'nin yinelendiği [0, 0, ..., i, ..., 0] dizisi biçiminde getirilebilen tüm değerlerin ortalamasını hesaplamak için aslında numpy belirtir. tüm olası değerler. İşlem i sabit konumu ile tekrarlanır ve diğer boyutlardaki indeksler birbiri ardına değişir (en sağdaki elemandan). Sonuç n-1 boyutlu bir dizidir.
  • R'de, MARGINS parametresi, applyişlevin olası tüm değerler arasında yineleme yaptığı [, ..., i, ...,] dizisi biçiminde getirilebilecek tüm değerlerin ortalamasını hesaplamasına izin verir. Tüm i değerleri yinelendiğinde işlem tekrarlanmaz. Bu nedenle sonuç basit bir vektördür.

-6

Diziler, eksen = 0 olarak adlandırılır ve satırlar, eksen = 1'e karşı dikey olarak ve sütunlar yatay olarak yerleştirilir. Eksen, dizinin boyutunu ifade eder. örnekleme


axis=0anlamına gelir, her satır bir yığın olarak, biz sadece iç satır yerine DataFrame ara satırlarını değiştirebiliriz. axis=1her sütun toplu olarak ifade edildiğinde, yalnızca iç sütun yerine DataFrame sütununu değiştirebiliriz.
Belter

5
Bu sayfadaki diğer tüm açıklamalara (ve Jupyter'deki pandalarla yapılan hızlı bir teste göre) tam olarak yanlış bir yol değil mi?
Marc Liyanage

2
Bu tam tersidir. Lütfen cevabınızı düzeltin.
Pokitrel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.