팬더의 축은 무엇을 의미합니까?


269

데이터 프레임을 생성하는 코드는 다음과 같습니다.

import pandas as pd
import numpy as np

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

그런 다음 데이터 프레임을 얻었습니다.

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

내가 commmand를 입력하면 :

dff.mean(axis=1)

나는 얻었다 :

0    1.074821
dtype: float64

팬더의 참조에 따르면 axis = 1은 열을 나타내며 명령 결과는 다음과 같습니다.

A    0.626386
B    1.523255
dtype: float64

그래서 내 질문은 : 팬더의 축은 무엇을 의미합니까?

답변:


382

평균이 계산 되는 축을 지정합니다 . 기본적으로 axis=0. 이것은과 일치 numpy.mean할 때 사용 axis지정된 명시 (투입 numpy.mean되는, 평탄화 된 배열에 대해 평균값을 계산 기본적 == 없음 축 없음) axis=0따라 (즉, 인덱스 팬더에서) 및 axis=1따라 . 명확성을 높이기 위해 axis='index'(대신 axis=0) 또는 axis='columns'(대신 ) 을 지정할 수 있습니다 axis=1.

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

164
일반적으로 axis = 0은 "열 방향"(및 axis = 1 "행 방향")이라고하며, "행을 따라"혼동된다고 생각합니다. (그러나 멋진 "pic":))
Andy Hayden

11
그래 @AndyHayden,하지만 어쩌면 둘 다 약간 처음은이 건너에 사람들에게, 혼란)
zhangxaochen

43
또한 axis=0행을 따라 집계하고 열을 따라 집계 하는 이유 axis=1는 데이터 프레임으로 인덱싱하는 방법 때문입니다. 에서 df.iloc[row, column], row인덱스 위치 0이고 column1 인덱스 위치에 NumPy와는 인 N 차원이 일반화 여기서 응집 「행 방향」또는 「열 방향보다 이해하기 시작을 축소하는 축 관점에서 생각 ".
Tom Q.

11
여전히 혼란 스럽습니다. 내가 df.drop("A", axis = 1)하면 A 이 삭제됩니다. "행을 따라"또는 "행으로"가 아니라 열 A를 삭제합니다.
ytu

5
@ytu axis=0는 각 행을 대량으로 의미하며 내부 행 대신 DataFrame 행 간만 조작 할 수 있습니다. axis=1각 열을 대량으로 의미하므로 내부 열 대신 DataFrame 간 열만 조작 할 수 있습니다. 따라서를 사용 df.drop("A", axis = 1)하면 전체 열이 삭제됩니다.
Belter

106

이 답변은 이것을 설명하는 데 도움이되지만 프로그래머가 아닌 사람 (예 : 데이터 과학 과정의 맥락에서 처음으로 Python을 배우는 사람)에게는 여전히 직관적이지 않습니다. 여전히 행과 열에 "along"또는 "for each"라는 용어를 사용하면 혼란 스러울 수 있습니다.

나에게 더 의미있는 것은 다음과 같이 말하는 것입니다.

  • 축 0은 각 COLUMN의 모든 ROWS에서 작동합니다.
  • 축 1은 각 ROW의 모든 열에 작용합니다.

따라서 축 0의 평균은 각 열의 모든 행의 평균이되고 축 1의 평균은 각 행의 모든 ​​열의 평균이됩니다.

궁극적으로 이것은 @zhangxaochen 및 @Michael과 같은 말을하지만 내면에서 편하게하는 방법입니다.


혼란은 소위 "행위"의 복잡성에서 비롯된 것이라고 생각합니다. df.dropna (axis = 0)은 먼저 각 ROW의 모든 COLUMNS를 확인한 다음 해당 ROWS를 null로 삭제합니다. 축은 마지막 단계에 대해 이야기하지만 우리의 뇌는 첫 번째 부분에 중점을 둘 것입니다.
숀 첸

69

시각화 해 봅시다 (항상 기억할 것입니다). 여기에 이미지 설명을 입력하십시오

팬더에서 :

  1. 축 = 0은 "인덱스"를 의미합니다. 그것은 A의 행 방향으로 작동 .

dataframe1 및 dataframe2에서 concat () 연산을 수행하기 위해 dataframe1을 가져와 dataframe1에서 첫 번째 행을 가져 와서 새 DF에 넣은 다음 dataframe1에서 다른 행을 가져 와서 새 DF에 넣을 때 까지이 프로세스를 반복한다고 가정합니다. 우리는 dataframe1의 맨 아래에 도달합니다. 그런 다음 dataframe2에 대해서도 동일한 프로세스를 수행합니다.

기본적으로 dataframe1 위에 dataframe2를 쌓거나 그 반대로도 가능합니다.

예를 들어 테이블이나 바닥에 책 더미 만들기

  1. axis = 1은 "열"을 의미합니다. 그것은 A의 열 현명한 동작.

dataframe1 및 dataframe2에서 concat () 연산을 수행하기 위해 dataframe1의 첫 번째 완전한 열 (일명 1 차 시리즈)을 꺼내고 새로운 DF에 배치 한 다음 dataframe1의 두 번째 열을 꺼내서 옆에 유지합니다 (가로) ) , 모든 열이 완료 될 때까지이 작업을 반복해야합니다. 그런 다음 dataframe2에서 동일한 프로세스를 반복합니다. 기본적으로 데이터 프레임 2를 옆으로 쌓아 놓습니다.

예를 들어 책장에 책을 정리합니다.

배열은 행렬과 비교하여 중첩 된 n 차원 구조를 나타내는 더 나은 표현이기 때문에 더 중요합니다! 따라서 아래에서 둘 이상의 차원으로 일반화 할 때 축이 중요한 역할을 수행하는 방법을 더 많이 시각화 할 수 있습니다. 또한 실제로는 n-dim 배열을 인쇄 / 쓰기 / 그리기 / 시각화 할 수 있지만 3 차원 이상의 용지에서는 행렬 표현 (3 차원)으로 동일하게 쓰거나 시각화 할 수 없습니다.

여기에 이미지 설명을 입력하십시오


6
나는이 대답이 올바른 것이라고 생각합니다. 시각화해야합니다. axis = 0 (또는 axis = 'rows'는 가로 축입니다. axis = 1 (또는 axis = 'columns')는 세로 축입니다. 팬더 방법 drop을 사용하면 열 또는 행을 제거 할 수 있습니다. axis = 1은 열을 제거하고 axis = 0을 지정하면 데이터 세트에서 행을 제거하므로 변수 df에 팬더 데이터 프레임이있는 경우 : df.drop (0, axis = 0)은 첫 번째 전체 행을 제거합니다. of dataset df.drop ( 'grades', axis = 1)은 데이터 세트에서 'grades'열을 제거합니다. 조금 더 명확
해지기를

3
@Roboblob-여전히 혼란 스럽습니다. df.drop (n, axis = 1)은 열에 작용합니다. df.mean (axis = 1)이 열에 대해 조치를 취하지 않는 이유는 무엇입니까?
matty

@ 매티, 먼저! 손이 더러워 졌어요! 당신의 참고를 위해, 드롭평균 당신이 당신의 예에서 무엇인가를 이해하지 않은 경우, 축 = 1이 모두 동일 새 질문을 문의하시기 바랍니다!
Anu

2
@anu-손이 더럽습니까? 우리는 중복 된 질문으로 너무 혼란스럽지 않아도됩니다. 이 혼란을 줄이기 위해이 페이지에 대한 하나 이상의 답변을 명확하게 할 수 있다고 확신합니다. 할 수만 있다면 스스로 할 수는 있지만 지금은 사용 방법 만 알고 있습니다. 원하는 데이터를 얻는 데 사용할 축을 이해합니다. 그러나 mean () 및 drop ()이 반대 축에 영향을 미치는 것처럼 느끼는 이유에 대해서는 혼란이 남아 있습니다.
matty

2
이 답변이 엄청나게 혼란 스럽습니다. 행에서 축 = 0으로 행동하는 것에 대해 이야기하지만 열 아래로 빨간색 화살표를 그립니다. 열에 작용하는 axis = 1에 대해 이야기하지만 행을 가로 지르는 화살표를 그립니다. 이 시스템을 만든 사람은 그 시스템을 잘 생각하지 못했습니다.
rockNwaves

33

axispd.DataFrames 의 경우 axis=0아래쪽을 가리키는 차원과 axis=1오른쪽을 가리키는 차원입니다 .

예 :ndarray with 모양을 생각하십시오 (3,5,7).

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

a는 3 차원 ndarray, 즉 3 개의 축을 갖는다 ( "축"은 복수의 "축"). 구성은 a각 조각의 크기가 5 x 7 인 3 개의 빵 조각처럼 보입니다. a[0,:,:]0 번째 슬라이스, a[1,:,:]1 번째 슬라이스 등을 나타냅니다.

a.sum(axis=0)sum()의 0 번째 축을 따라 적용됩니다 a. 모든 조각을 추가하고 하나의 모양 조각으로 끝납니다 (5,7).

a.sum(axis=0) 에 해당

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

b그리고 a.sum(axis=0)것 같은 모두보기

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.]])

(A)에 pd.DataFrame, 축이 동일한 방향에서 같은 작동 numpy.array: S axis=0적용 sum()또는 열마다 다른 환원 기능.

NB @zhangxaochen의 답변에서 "행을 따라"와 "열을 따라"라는 문구가 약간 혼란 스럽다는 것을 알았습니다. axis=0"각 열을 따라"및 axis=1" 각 열을 따라"를 참조해야합니다 .


1
Safak이 사용 된 문구가 언급되지 않았기 때문에 말이 잘못되어 더 혼란스러워집니다.
javadba

이것이 더 나은 대답입니다
Ravi G

24

가장 쉽게 이해할 수있는 방법은 각 열 ( axis = 0) 또는 각 행 ( axis = 1)에 대한 통계를 계산하는지에 대해 이야기하는 것 입니다. 통계를 계산하면 평균을 말하면 axis = 0각 열에 대한 통계를 얻을 수 있습니다. 따라서 각 관측치가 행이고 각 변수가 열에 있으면 각 변수의 평균을 얻게됩니다. 설정 axis = 1하면 각 행에 대한 통계를 계산합니다. 이 예에서는 모든 변수에 대한 각 관측치의 평균을 얻습니다 (아마도 관련 측정 값의 평균을 원할 수도 있음).

axis = 0: 열 기준 = 열 방향 = 행 따라

axis = 1: 행별 = 행별 = 열 따라


"aong"을 "across"로 바꿔야한다고 생각합니다. 나에게 무언가 (예 : 도로)를 따라가는 것은 그것에 머무르는 것을 의미하지만 axis=0, 평균을 계산할 때 우리는 말하는 행에 머 무르지 않습니다. 오히려 우리는 열의 모든 행을 가로 질러갑니다.
혼란

13

Wiki의 테이블을 보자. 이는 상위 10 개국의 2010 년부터 2019 년까지 GDP의 IMF 추정치입니다. 여기에 이미지 설명을 입력하십시오

1. 축 1은 모든 열의 각 행에 대해 작동
합니다. 10 년 (2010-2019) 동안 각 국가의 평균 (평균) GDP를 계산하려면을 수행해야합니다 df.mean(axis=1). 예를 들어 2010 년부터 2019 년까지 미국의 평균 GDP를 계산하려면df.loc['United States','2010':'2019'].mean(axis=1)

2. 축 0은 모든 행의 각 열에 대해 작동
합니다. 모든 국가의 EACH 연도에 대한 평균 (평균) GDP를 계산하려면 다음을 수행해야합니다 df.mean(axis=0). 예를 들어 미국, 중국, 일본, 독일 및 인도의 2015 년 평균 GDP를 계산하려는 경우 df.loc['United States':'India','2015'].mean(axis=0)

참고 : 위 코드는 '국가 (또는 종속 지역)'열을 색인으로 설정 한 후에 만 ​​작동합니다. set_index방법.


11

프로그래밍 관점에서 축은 모양 튜플의 위치입니다. 예를 들면 다음과 같습니다.

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)

축의 평균은 해당 치수가 제거되도록합니다.

원래의 질문을 참조하면, dff 모양은 (1,2)입니다. axis = 1을 사용하면 모양이 (1,)으로 변경됩니다.


8

팬더의 디자이너 인 Wes McKinney는 재무 데이터를 집중적으로 다루었습니다. 열을 주식 이름으로 생각하고 색인을 일일 가격으로 생각하십시오. 그런 다음 axis=0이 재무 데이터와 관련 하여 기본 동작이 무엇인지 추측 할 수 있습니다 . axis=1단순히 '다른 방향'으로 생각할 수 있습니다.

예를 들어, 다음과 같은 통계 기능, mean(), sum(), describe(), count()열 현명한 모든 기본은 각 주식을 할 수 더 의미가 있기 때문이다. sort_index(by=)또한 기본적으로 열입니다. fillna(method='ffill')같은 재고이기 때문에 열을 따라 채워집니다. dropna()당신은 아마 그 주식의 모든 가격을 버리는 대신에 그날 가격을 버리고 싶기 때문에 행이 기본값으로 설정됩니다.

마찬가지로 대괄호 색인은 하루를 선택하는 대신 주식을 선택하는 것이 일반적이기 때문에 열을 나타냅니다.


1
당신의 추론은 올바르게 들리지만 mean (), sum () 및 기타 함수는 기본적으로 (axis = 0)으로 설정됩니다. 그리고 행 방향은 우리가 열 방향으로 기대하는 것처럼 작동하는 것 같습니다 :) 혼란스러운 것 같습니다.
bincob

5

축 1 (열)과 축 0 (행)을 기억하는 쉬운 방법 중 하나는 예상되는 출력입니다.

  • 각 행에 대한 출력이 예상되면 axis = 'columns'를 사용하십시오.
  • 반면에 각 열에 대한 출력을 원하면 axis = 'rows'를 사용하십시오.

감사. 그러나 이것은 계산에 대해서만 작동합니까? 더 많은 식별 용량으로 kewarg 축을 사용하는 pd.concat또는 과 같은 방법에서는 작동하지 않습니다 df.dropna().
보웬 리우

3

axis=올바르게 사용하는 데 따른 문제점 은 두 가지 주요한 경우에 사용하는 것입니다.

  1. 누적 값 계산 또는 데이터 재 배열 (예 : 정렬)
  2. 엔터티 (예 : 데이터 프레임 ) 를 조작 ( "재생" )

이 답변의 주요 아이디어는 혼란을 피하기 위해 숫자 또는 특정 축을 지정하기위한 이름 중 더 명확하고 직관적이며 설명적인 이름선택한다는 것입니다.

팬더는 수학, 특히 n 차원 행렬을 기반으로하는 NumPy를 기반으로합니다. 다음은 3 차원 공간에서 수학에서 축 이름을 일반적으로 사용하는 이미지입니다.

여기에 이미지 설명을 입력하십시오 이 그림은 축의 서 수만 기억하기위한 것입니다.

  • 0 x 축의 경우
  • 1 y 축의 경우
  • 2 z 축용.

Z 축 만을위한 패널 ; 대한 dataframes 우리는 녹색 색, 우리의 관심 제한됩니다 2 차원 기본 평면x 축 ( 0수직) , 및 y 축 ( 1수평)를.

여기에 이미지 설명을 입력하십시오 그것은 모든의 숫자 의 잠재적 인 값으로 axis=매개 변수입니다.

이름 축의은 'index'(별칭을 사용할 수 있습니다를 'rows')하고 'columns',이 설명은 이들의 이름과 순서 번호 사이의 관계는 중요하지 않습니다 모두가 알고있는대로 (축), 어떤 단어 "행""열" 평균 ( 모든 사람들은 여기에 - 내 생각은 - 무엇을 알고 단어 "인덱스" 팬더 수단에서).

그리고 지금, 나의 추천 :

  1. 누적 값계산하려면 축 0 (또는 축 1 )을 따라 위치한 값에서 사용 axis=0하거나 계산 axis=1하십시오.

    당신이 원한다면 마찬가지로, 값을 재 배열 , 사용 축 번호를 , 축으로 하는에 따라 (예에 대한 정리에 대한 데이터를 위치 정렬 ).

  2. 당신이 할 경우 조작 (예 : CONCATENATE ) 엔티티 (예 : dataframes 사용 -) axis='index': (동의어 axis='rows'나) axis='columns'지정하고자하는 결과 변화 - 인덱스 ( ) 또는 열을 각각.
    ( 연결 하려면 더 긴 색인 (= 더 많은 행) 또는 더 많은 열 을 각각 얻습니다 .)


이것은 가장 좋은 답변이며 아마도 op에 의해 정답으로 표시되어야합니다!
Anze

2

이것은 @Safak의 답변을 기반으로합니다. 팬더 / numpy의 축을 이해하는 가장 좋은 방법은 3d 배열을 만들고 3 개의 다른 축을 따라 합 함수의 결과를 확인하는 것입니다.

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

는 :

    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.]]])

이제 각 축을 따라 배열의 요소 합계를 확인하십시오.

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

다음과 같은 결과가 나타납니다.

   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

나는 이런 식으로 이해합니다 :

데이터 프레임 에서 왼쪽에서 오른쪽 / 오른쪽 에서 왼쪽으로 순회해야하는 경우 열을 병합하는 것 같습니다. 다양한 열에서 작업하고 있습니다. 이것은 축 1입니다

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

우리가 기둥에서 작동하고 있음을 주목하십시오.

마찬가지로 데이터 프레임 에서 작업이 위에서 아래로 / 아래로 순회해야하는 경우 행을 병합합니다. 이것은 axis = 0 입니다.


1

축 = 0은 위 아래를 의미합니다. 축 = 1은 왼쪽에서 오른쪽을 의미합니다.

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

주어진 예는 열 == 키의 모든 데이터를 합한 것입니다.


0

내 생각 : Axis = n, 여기서 n = 0, 1 등은 해당 축을 따라 행렬이 축소 (접힘)되었음을 의미합니다. 따라서 2D 행렬에서 0 (행)을 따라 축소하면 실제로 한 번에 한 열에서 작동합니다. 고차 행렬의 경우와 유사합니다.

이것은 0-> 행 및 1-> 열인 행렬의 차원에 대한 일반 참조와 동일하지 않습니다. N 차원 배열의 다른 차원과 유사합니다.


0

나는 팬더의 초보자입니다. 그러나 이것은 팬더의 축을 이해하는 방법입니다.


상수 변화 방향


0 열 행 아래쪽으로 |


오른쪽으로 1 행 열->


따라서 특정 항목이되어야한다는, 열의 평균 계산하기 일정 하지만 캔 변화 아래 행 (변화)는 그 축 = 0이고, 그래서.

마찬가지로 행의 평균을 계산하기 위해 해당 특정 행은 일정 하지만 다른 열 (가변) , 축 = 1을 통과 할 수 있습니다 .


0

나는 그것을 이해하는 또 다른 방법이 있다고 생각합니다.

np.array의 경우 열을 제거하려면 axis = 1을 사용합니다. 행을 제거하려면 axis = 0을 사용하십시오.

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,)

pandas 객체의 경우 axis = 0행 단위 작업을 axis = 1나타내고 열 단위 작업을 나타냅니다. 이것은 numpy정의에 따라 다르므로 numpy.docpandas.doc 에서 정의를 확인할 수 있습니다.


0

사람들이 정확하게 잘못된 방식으로 해석 할 수 있기 때문에 '행 단위'또는 '열을 따라'사용하지 않는 것이 좋습니다.

먼저 비유. 직관적으로, pandas.DataFrame.drop(axis='column')N 열에서 열 을 삭제하고 (N-1) 열을 제공 할 것으로 예상 됩니다. 따라서 지금은 행에주의를 기울일 수 없으며 영어 사전에서 단어 '행'을 제거하십시오. 그 반대도 drop(axis='row')행에 적용됩니다.

같은 방식 sum(axis='column')으로 여러 열 에서 작동하며 1 열을 제공합니다. 마찬가지로 sum(axis='row')1 행이됩니다. 이것은 가장 간단한 형태의 정의와 일치하여 숫자 목록을 단일 숫자로 줄입니다.

일반적으로을 사용 axis=column하면 열이 표시되고 열에 대한 작업 및 열이 표시됩니다. 행을 잊어 버리십시오.

을 사용 axis=row하여 관점을 변경하고 행에서 작업하십시오.

0과 1은 '행'과 '열'의 별명 일뿐입니다. 매트릭스 인덱싱의 규칙입니다.


axis = 'columns'를 사용하면이 해석이 올바르지 않습니다.
user3065757

의견을 보내 주셔서 감사합니다. 예제를 자세히 설명해 주시겠습니까?
lqu

당신이 누구에게 답장을하고 있지는 않지만 pd.concat, 당신의 설명으로 알아 내려고 시도 할 때 , 그것은 효과가 없습니다. 2 축으로 연결 동작을 설명해 주시겠습니까? 감사.
보웬 리우

@BowenLiu 2 개의 사과 목록을 연결하면 더 많은 사과 1 개를 얻습니다 (그러나 더 큰 사과는 아님). 행을 연결하면 (축 = 0) 더 많은 행을 얻습니다 (더 이상 행이 아님). 열을 연결하면 (축 = 1) 더 많은 열을 얻습니다 (더 이상 열이 아님). 아이디어는 axis = 0이 행 내부가 아니라 행 사이에서 작동한다는 것입니다.
lqu

0

지난 한 시간 동안 축을 알아 내려고 노력했습니다. 위의 모든 대답과 문서의 언어는 전혀 도움이되지 않습니다.

지금 이해하는 것처럼 Pandas에서 axis = 1 또는 0 은 함수를 적용 할 때 일정 축을 유지하려는 축 헤더를 의미 합니다.

참고 : 헤더를 말하면 색인 이름을 의미합니다.

예를 확장 :

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

axis = 1 = columns : 열 머리글을 일정하게 유지하고 데이터를 변경하여 평균 함수를 적용합니다. 시연하기 위해 열 헤더를 다음과 같이 일정하게 유지합니다.

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

이제 우리는 한 세트의 A와 B 값을 채운 다음 평균을 찾습니다.

|            | 0.626386| 1.52325|  

그런 다음 다음 A 및 B 값 집합을 채우고 평균을 찾습니다.

|            | 0.626386| 1.52325|

마찬가지로 axis = rows의 경우 행 헤더를 일정하게 유지하고 데이터를 계속 변경합니다. 시연하려면 먼저 행 헤더를 수정하십시오.

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

이제 첫 번째 X 및 Y 값 집합을 채운 다음 평균을 찾으십시오.

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

그런 다음 다음 X 및 Y 값 세트를 채우고 평균을 찾으십시오.

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

요약해서 말하자면,

axis = columns 인 경우 열 머리글을 수정하고 다른 행에서 오는 데이터를 변경합니다.

axis = rows 인 경우 행 머리글을 수정하고 다른 열에서 오는 데이터를 변경합니다.


0

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

axis = 1, 합계 행을 현명하게 제공하고 keepdims = True는 2D 치수를 유지합니다. 그것이 당신을 돕기를 바랍니다.


OP는 아니지만 감사합니다. 사람들이 이것에 대해 가지고있는 혼란의 대부분은 Pandas의 다큐멘터리에서 axis = 1이 열에 해당한다고 생각합니다. 그러나 여기서는 '행 단위'계산을 수행합니다.
보웬 리우

0

여기에 많은 답변이 많이 도움이되었습니다!

함수 에서와 같이 axisPython과 MARGINR 의 다른 동작으로 혼란 스러울 경우 apply관심있는 블로그 게시물을 찾을 수 있습니다 : https://accio.github.io/programming/2020/05/ 19 / numpy-pandas-axis.html .

본질적으로:

  • 그들의 행동은 흥미롭게도 2 차원 배열보다 3 차원 배열로 이해하기 쉽습니다.
  • Python 패키지 numpypandas에서 축 매개 변수의 합계는 실제로 numpy를 지정하여 array [0, 0, ..., i, ..., 0] 형식으로 가져올 수있는 모든 값의 평균을 계산합니다. 가능한 모든 값. 프로세스는 고정 된 i 위치로 반복되며 다른 치수의 인덱스는 (가장 오른쪽 요소부터) 하나씩 변합니다. 결과는 n-1 차원 배열입니다.
  • R에서 MARGINS 매개 변수는 apply함수가 array [, ..., i, ...,] 형식으로 페치 될 수있는 모든 값의 평균을 계산 하도록합니다 . 여기서 모든 가능한 값을 반복합니다. 모든 i 값이 반복되면 프로세스가 반복되지 않습니다. 따라서 결과는 간단한 벡터입니다.

-6

배열은 소위 axis = 0이고 행은 세로로, 축은 1로, 열은 가로로 배치합니다. 축은 배열의 차원을 나타냅니다. 삽화


axis=0각 행을 대량으로 의미합니다. 내부 행 대신 DataFrame 행 간만 조작 할 수 있습니다. axis=1각 열을 대량으로 의미하므로 내부 열 대신 DataFrame 간 열만 조작 할 수 있습니다.
Belter

5
이 페이지의 거의 모든 다른 설명에 따르면 (그리고 Jupyter의 팬더를 사용한 빠른 테스트에 따르면) 정확하게 잘못된 방법이 아닙니까?
Marc Liyanage

2
이것은 정반대입니다. 답을 수정하십시오.
서밋 Pokhrel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.