Pandas Dataframe / Numpy 배열 "축" 정의의 모호성
python 축이 어떻게 정의되는지, 그리고 그것들이 DataFrame의 행 또는 열을 참조하는지에 대해 매우 혼란스러웠습니다.아래의 코드를 생각해 보십시오.
>>> df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], columns=["col1", "col2", "col3", "col4"])
>>> df
col1 col2 col3 col4
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
그래서 우리가 전화를.df.mean(axis=1)
, 각 행에 걸쳐 평균을 구합니다.
>>> df.mean(axis=1)
0 1
1 2
2 3
하지만 우리가 전화를 하면df.drop(name, axis=1)
, 열이 아니라 열을 떨어뜨립니다.
>>> df.drop("col4", axis=1)
col1 col2 col3
0 1 1 1
1 2 2 2
2 3 3 3
누가 팬더/넘피/스키피에서 "축"이 무엇을 의미하는지 이해할 수 있도록 도와줄 수 있나요?
사이드 노트,DataFrame.mean
잘못 정의되었을 수도 있습니다.그것에 대한 문서에 적혀있습니다.axis=1
행이 아니라 열에 대한 평균을 의미하는 것으로 추정됩니다...
0=down과 1= across로 기억하는 것이 가장 간단할 것입니다.
이것은 다음을 의미합니다.
- 사용하다
axis=0
방법을 각 열 아래에 적용하거나 행 레이블(인덱스)에 적용합니다. - 사용하다
axis=1
방법을 각 행에 적용하거나 열 레이블에 적용합니다.
각 축이 참조하는 데이터 프레임의 부품을 보여주는 그림은 다음과 같습니다.
팬더가 NumPy의 단어 사용을 따라 한다는 것을 기억하는 것도 유용합니다.axis
. 이 용법은 NumPy의 용어집에서 다음과 같이 설명합니다.
축은 두 개 이상의 차원을 가진 배열에 대해 정의됩니다.2차원 배열에는 두 개의 대응 축이 있습니다. 첫 번째 축은 행 간에 수직으로 아래쪽으로 실행되고(축 0), 두 번째 축은 열 간에 수평으로 실행됩니다(축 1).[나의 강조]
그래서 문제의 방법에 관해서는,df.mean(axis=1)
, 정확하게 정의된 것 같습니다.각 개별 행을 따라 열에 걸쳐 수평으로 항목의 평균을 취합니다.반면에.df.mean(axis=0)
수직으로 아래쪽으로 행을 옮기는 작업이 될 것입니다.
유사하게,df.drop(name, axis=1)
열 레이블이 수평 축을 직관적으로 가로지르기 때문에 열 레이블에 대한 작업을 나타냅니다.지정하기axis=0
메소드를 행에 적용할 수 있습니다.
이미 적절한 답이 있지만, 2차원 이상의 다른 예를 들어보겠습니다.
매개변수axis
변경할 축을 의미합니다.
예를 들어 차원이 x b x c인 데이터 프레임이 있다고 가정합니다.
df.mean(axis=1)
치수 x 1 x c의 데이터 프레임을 반환합니다.df.drop("col4", axis=1)
차원이 x (b-1) x c인 데이터 프레임을 반환합니다.
여기서,axis=1
두번째 축을 의미합니다.b
,그렇게b
이 예에서는 값이 변경됩니다.
또 다른 설명 방법:
// Not realistic but ideal for understanding the axis parameter
df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]],
columns=["idx1", "idx2", "idx3", "idx4"],
index=["idx1", "idx2", "idx3"]
)
---------------------------------------1
| idx1 idx2 idx3 idx4
| idx1 1 1 1 1
| idx2 2 2 2 2
| idx3 3 3 3 3
0
대해서df.drop
(축은 위치를 의미함)
A: I wanna remove idx3.
B: **Which one**? // typing while waiting response: df.drop("idx3",
A: The one which is on axis 1
B: OK then it is >> df.drop("idx3", axis=1)
// Result
---------------------------------------1
| idx1 idx2 idx4
| idx1 1 1 1
| idx2 2 2 2
| idx3 3 3 3
0
대해서df.apply
(축은 방향을 의미함)
A: I wanna apply sum.
B: Which direction? // typing while waiting response: df.apply(lambda x: x.sum(),
A: The one which is on *parallel to axis 0*
B: OK then it is >> df.apply(lambda x: x.sum(), axis=0)
// Result
idx1 6
idx2 6
idx3 6
idx4 6
문자열 별칭 'index' 및 'columns'를 정수 0/1 대신 사용할 수 있음을 널리 알아야 합니다.별칭은 훨씬 더 명확하며 계산이 어떻게 이루어지는지 기억하는 데 도움이 됩니다.'index'의 다른 별칭은 '행'입니다.
.axis='index'
를 사용하면 계산이 열 아래에서 수행되므로 혼란스럽습니다.하지만 다른 행과 같은 크기의 결과가 나온 것으로 기억합니다.
제가 무슨 말을 하고 있는지 화면에 자료를 좀 가져다 보겠습니다.
df = pd.DataFrame(np.random.rand(10, 4), columns=list('abcd'))
a b c d
0 0.990730 0.567822 0.318174 0.122410
1 0.144962 0.718574 0.580569 0.582278
2 0.477151 0.907692 0.186276 0.342724
3 0.561043 0.122771 0.206819 0.904330
4 0.427413 0.186807 0.870504 0.878632
5 0.795392 0.658958 0.666026 0.262191
6 0.831404 0.011082 0.299811 0.906880
7 0.749729 0.564900 0.181627 0.211961
8 0.528308 0.394107 0.734904 0.961356
9 0.120508 0.656848 0.055749 0.290897
우리가 모든 열의 평균을 구하고자 할 때, 우리는axis='index'
다음을 얻을 수 있습니다.
df.mean(axis='index')
a 0.562664
b 0.478956
c 0.410046
d 0.546366
dtype: float64
다음과 같은 결과를 얻을 수 있습니다.
df.mean() # default is axis=0
df.mean(axis=0)
df.mean(axis='rows')
행에서 왼쪽에서 오른쪽으로 작업을 수행하려면 axis= 'columns'를 사용합니다.제 DataFrame에 추가 열이 추가될 수도 있다는 생각으로 기억합니다.
df.mean(axis='columns')
0 0.499784
1 0.506596
2 0.478461
3 0.448741
4 0.590839
5 0.595642
6 0.512294
7 0.427054
8 0.654669
9 0.281000
dtype: float64
다음과 같은 결과를 얻을 수 있습니다.
df.mean(axis=1)
축=0/인덱스/행으로 새 행 추가
이 결과를 사용하여 행 또는 열을 추가하여 설명을 완료하도록 하겠습니다.따라서 축 = 0/index/rows를 사용할 때마다 DataFrame의 새 행을 얻는 것과 같습니다.행을 추가합니다.
df.append(df.mean(axis='rows'), ignore_index=True)
a b c d
0 0.990730 0.567822 0.318174 0.122410
1 0.144962 0.718574 0.580569 0.582278
2 0.477151 0.907692 0.186276 0.342724
3 0.561043 0.122771 0.206819 0.904330
4 0.427413 0.186807 0.870504 0.878632
5 0.795392 0.658958 0.666026 0.262191
6 0.831404 0.011082 0.299811 0.906880
7 0.749729 0.564900 0.181627 0.211961
8 0.528308 0.394107 0.734904 0.961356
9 0.120508 0.656848 0.055749 0.290897
10 0.562664 0.478956 0.410046 0.546366
축=1/로 새 열 추가
마찬가지로 axis=1/ columns를 사용하면 쉽게 자신의 열로 만들 수 있는 데이터가 생성됩니다.
df.assign(e=df.mean(axis='columns'))
a b c d e
0 0.990730 0.567822 0.318174 0.122410 0.499784
1 0.144962 0.718574 0.580569 0.582278 0.506596
2 0.477151 0.907692 0.186276 0.342724 0.478461
3 0.561043 0.122771 0.206819 0.904330 0.448741
4 0.427413 0.186807 0.870504 0.878632 0.590839
5 0.795392 0.658958 0.666026 0.262191 0.595642
6 0.831404 0.011082 0.299811 0.906880 0.512294
7 0.749729 0.564900 0.181627 0.211961 0.427054
8 0.528308 0.394107 0.734904 0.961356 0.654669
9 0.120508 0.656848 0.055749 0.290897 0.281000
다음과 같은 개인 변수로 모든 별칭을 볼 수 있는 것으로 나타납니다.
df._AXIS_ALIASES
{'rows': 0}
df._AXIS_NUMBERS
{'columns': 1, 'index': 0}
df._AXIS_NAMES
{0: 'index', 1: 'columns'}
axis='rows' 또는 axis=0이면 행 방향의 액세스 요소를 최대 아래 방향으로 의미합니다.축=0을 따라 합을 적용하면 각 열의 합계가 됩니다.
axis= 'columns' 또는 axis=1일 때는 열 방향, 왼쪽에서 오른쪽으로 접근 요소를 의미합니다.축=1을 따라 합을 적용하면 각 행의 합계를 얻을 수 있습니다.
아직도 헷갈리네요!하지만 위의 내용이 저를 좀 더 쉽게 만들어 줍니다.
치수 변경, 축=0이면 행 변경, 열 변경, 축=1이면 열 변경, 행 변경 변경으로 기억했습니다.
언급URL : https://stackoverflow.com/questions/25773245/ambiguity-in-pandas-dataframe-numpy-array-axis-definition
'source' 카테고리의 다른 글
Pandas Data Frame을 사용하여 OLS 회귀 분석 실행 (0) | 2023.10.26 |
---|---|
MySQL 및 NoSQL: 올바른 것을 선택할 수 있도록 도와줍니다. (0) | 2023.10.26 |
PowerShell 개체에서 멤버를 제거하시겠습니까? (0) | 2023.10.21 |
워드프레스:사용자 정의 필드의 모든 값 가져오기 (0) | 2023.10.21 |
그 끝에 cross(x) 버튼이 있는 EditText를 만드는 방법? (0) | 2023.10.21 |