팬더의 축은 무엇을 의미합니까?
데이터 프레임을 생성하는 코드는 다음과 같습니다.
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
그래서 내 질문은 : 팬더의 축은 무엇을 의미합니까?
평균이 계산 되는 축을 지정합니다 . 기본적으로 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 |
↓ ↓
이 답변은 이것을 설명하는 데 도움이되지만 프로그래머가 아닌 사람 (예 : 데이터 과학 과정의 맥락에서 처음으로 Python을 배우는 사람)에게는 여전히 직관적이지 않습니다. 여전히 행과 열에 "along"또는 "for each"라는 용어를 사용하면 혼란 스러울 수 있습니다.
나에게 더 의미있는 것은 다음과 같이 말하는 것입니다.
- 축 0은 각 COLUMN의 모든 ROWS에서 작동합니다.
- 축 1은 각 ROW의 모든 열에 작용합니다.
따라서 축 0의 평균은 각 열의 모든 행의 평균이되고 축 1의 평균은 각 행의 모든 열의 평균이됩니다.
궁극적으로 이것은 @zhangxaochen 및 @Michael과 같은 말을하지만 내면에서 더 쉬운 방법으로 말하고 있습니다.
팬더에서 :
- 축 = 0은 "인덱스"를 의미합니다. 그것은 A의 행 방향으로 작동 .
dataframe1 및 dataframe2에서 concat () 연산을 수행하기 위해 dataframe1을 가져와 dataframe1에서 첫 번째 행을 가져 와서 새 DF에 넣은 다음 dataframe1에서 다른 행을 가져 와서 새 DF에 넣습니다. 우리는 dataframe1의 맨 아래에 도달합니다. 그런 다음 dataframe2에 대해서도 동일한 프로세스를 수행합니다.
기본적으로 dataframe1 위에 dataframe2를 쌓거나 그 반대로도 가능합니다.
예를 들어 테이블이나 바닥에 책 더미 만들기
- axis = 1은 "열"을 의미합니다. 그것은 A의 열 현명한 동작.
dataframe1 및 dataframe2에서 concat () 연산을 수행하기 위해 dataframe1의 첫 번째 완전한 열 (일명 1 차 시리즈)을 꺼내고 새로운 DF에 넣은 다음 dataframe1의 두 번째 열을 꺼내서 옆에 유지합니다 (옆으로). ) , 모든 열이 완료 될 때까지이 작업을 반복해야합니다. 그런 다음 dataframe2에서 동일한 프로세스를 반복합니다. 기본적으로 데이터 프레임 2를 옆으로 쌓아 놓습니다.
예를 들어 책장에 책을 정리합니다.
더구나 배열은 행렬에 비해 중첩 된 n- 차원 구조를 표현하기에 더 나은 표현이기 때문입니다! 따라서 아래에서 둘 이상의 차원으로 일반화 할 때 축이 중요한 역할을 수행하는 방법을 더 시각화 할 수 있습니다. 또한 n- 차원 배열을 실제로 인쇄 / 쓰기 / 그리기 / 시각화 할 수 있지만 3 차원 이상의 용지에서는 행렬 표현 (3 차원)으로 동일하게 쓰거나 시각화 할 수 없습니다.
axis
pd.DataFrame
s 의 경우 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
" 각 열을 따라"를 참조해야합니다 .
가장 쉽게 이해할 수있는 방법은 각 열 ( axis = 0
) 또는 각 행 ( axis = 1
)에 대한 통계를 계산하는지에 대해 이야기하는 것 입니다. 통계를 계산하면 평균을 말하면 axis = 0
각 열에 대한 통계를 얻을 수 있습니다. 따라서 각 관측치가 행이고 각 변수가 열에 있으면 각 변수의 평균을 얻게됩니다. 설정 axis = 1
하면 각 행에 대한 통계를 계산합니다. 이 예에서는 모든 변수에 대한 각 관측치의 평균을 얻습니다 (아마도 관련 측정 값의 평균을 원할 수도 있음).
axis = 0
: 열 기준 = 열 방향 = 행 따라
axis = 1
: 행별 = 행별 = 열 따라
프로그래밍 관점에서 축은 모양 튜플의 위치입니다. 예를 들면 다음과 같습니다.
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,)으로 변경됩니다.
팬더의 디자이너 인 Wes McKinney는 재무 데이터를 집중적으로 다루었습니다. 열을 주식 이름으로 생각하고 색인을 일일 가격으로 생각하십시오. 그런 다음 axis=0
이 재무 데이터와 관련 하여 기본 동작이 무엇인지 추측 할 수 있습니다 . axis=1
단순히 '다른 방향'으로 생각할 수 있습니다.
예를 들어, 다음과 같은 통계 기능, mean()
, sum()
, describe()
, count()
열 현명한 모든 기본은 각 주식을 할 수 더 의미가 있기 때문이다. sort_index(by=)
또한 기본적으로 열입니다. fillna(method='ffill')
같은 재고이기 때문에 열을 따라 채워집니다. dropna()
당신은 아마 그 주식의 모든 가격을 버리는 대신에 그날 가격을 버리고 싶기 때문에 행이 기본값으로 설정됩니다.
마찬가지로 대괄호 색인은 하루를 선택하는 대신 주식을 선택하는 것이 일반적이기 때문에 열을 나타냅니다.
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
방법.
축 1 (열)과 축 0 (행)을 기억하는 쉬운 방법 중 하나는 예상되는 출력입니다.
- 각 행에 대한 출력이 예상되면 axis = 'columns'를 사용하십시오.
- 반면에 각 열에 대한 출력을 원하면 axis = 'rows'를 사용하십시오.
이것은 @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.]])
축 = 0은 위 아래를 의미합니다. 축 = 1은 왼쪽에서 오른쪽을 의미합니다.
sums[key] = lang_sets[key].iloc[:,1:].sum(axis=0)
주어진 예는 열 == 키의 모든 데이터를 합한 것입니다.
axis=
올바르게 사용하는 데 따른 문제점 은 두 가지 주요한 경우에 사용하는 것입니다.
- 누적 값 계산 또는 데이터 재 배열 (예 : 정렬)
- 엔터티 (예 : 데이터 프레임 ) 를 조작 ( "재생" )하는 데 사용됩니다.
이 답변의 주요 아이디어는 혼란을 피하기 위해 숫자 또는 특정 축을 지정하기위한 이름 중 더 명확하고 직관적이며 설명적인 이름 을 선택한다는 것입니다.
팬더는 수학, 특히 n 차원 행렬을 기반으로하는 NumPy를 기반으로합니다. 다음은 3 차원 공간에서 수학에서 축 이름을 일반적으로 사용하는 이미지입니다.
0
x 축의 경우1
y 축의 경우2
z 축용.
Z 축 만을위한 패널 ; 대한 dataframes 우리는 녹색 색, 우리의 관심 제한됩니다 2 차원 기본 평면 과 x 축 ( 0
수직) , 및 y 축 ( 1
수평)를.
그것은 모든의 숫자 의 잠재적 인 값으로 axis=
매개 변수입니다.
The names of axes are 'index'
(you may use the alias 'rows'
) and 'columns'
, and for this explanation it is NOT important the relation between these names and ordinal numbers (of axes), as everybody knows what the words "rows" and "columns" mean (and everybody here - I suppose - knows what the word "index" in pandas means).
And now, my recomendation:
If you want to compute an accumulated value, you may compute it from values located along axis 0 (or along axis 1) - use
axis=0
(oraxis=1
).Similarly, if you want to rearrange values, use the axis number of the axis, along which are located data for rearranging (e. g. for sorting).
If you want to manipulate (e. g. concatenate) entities (e. g. dataframes) - use
axis='index'
(synonym:axis='rows'
) oraxis='columns'
to specify the resulting change - index (rows) or columns, respectively.
(For concatenating, you will obtain either a longer index (= more rows), or more columns, respectively.)
I will explicitly avoid using 'row-wise' or 'along the columns', since people may interpret them in exactly the wrong way.
Analogy first. Intuitively, you would expect that pandas.DataFrame.drop(axis='column')
drops a column from N columns and gives you (N - 1) columns. So you can pay NO attention to rows for now (and remove word 'row' from your English dictionary.) Vice versa, drop(axis='row')
works on rows.
In the same way, sum(axis='column')
works on multiple columns and gives you 1 column. Similarly, sum(axis='row')
results in 1 row. This is consistent with its simplest form of definition, reducing a list of numbers to a single number.
In general, with axis=column
, you see columns, work on columns, and get columns. Forget rows.
With axis=row
, change perspective and work on rows.
0 and 1 are just aliases for 'row' and 'column'. It's the convention of matrix indexing.
My thinking : Axis = n, where n = 0, 1, etc. means that the matrix is collapsed (folded) along that axis. So in a 2D matrix, when you collapse along 0 (rows), you are really operating on one column at a time. Similarly for higher order matrices.
This is not the same as the normal reference to a dimension in a matrix, where 0 -> row and 1 -> column. Similarly for other dimensions in an N dimension array.
I'm a newbie to pandas. But this is how I understand axis in pandas:
Axis Constant Varying Direction
0 Column Row Downwards |
1 Row Column Towards Right -->
So to compute mean of a column, that particular column should be constant but the rows under that can change (varying) so it is axis=0.
Similarly, to compute mean of a row, that particular row is constant but it can traverse through different columns (varying), axis=1.
I understand this way :
Say if your operation requires traversing from left to right/right to left in a dataframe, you are apparently merging columns ie. you are operating on various columns. This is axis =1
Example
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
Point to note here is we are operating on columns
Similarly, if your operation requires traversing from top to bottom/bottom to top in a dataframe, you are merging rows. This is axis=0.
I think there is an another way to understand it.
For a np.array,if we want eliminate columns we use axis = 1; if we want eliminate rows, we use 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,)
For pandas object, axis = 0
stands for row-wise operation and axis = 1
stands for column-wise operation. This is different from numpy
by definition, we can check definitions from numpy.doc and pandas.doc
Arrays are designed with so-called axis=0 and rows positioned vertically versus axis=1 and columns positioned horizontally. Axis refers to the dimension of the array.
참고 URL : https://stackoverflow.com/questions/22149584/what-does-axis-in-pandas-mean
'IT story' 카테고리의 다른 글
PHP에서 POST 본문을 얻는 방법? (0) | 2020.04.14 |
---|---|
Swift 사전에 키가 포함되어 있는지 확인하고 해당 값을 가져 오는 경우 (0) | 2020.04.14 |
Mac OS X 10.9에 Lxml을 설치할 수 없습니다 (0) | 2020.04.13 |
C에서 문자열을 정수로 변환하는 방법은 무엇입니까? (0) | 2020.04.13 |
Objective-C에서 자동 참조 카운트는 어떤 종류의 누출을 방지하거나 최소화하지 않습니까? (0) | 2020.04.13 |