파이썬 축이 어떻게 정의되는지, 그리고 이들이 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)
하면 실제로 행이 아닌 column을 삭제합니다 .
>>> df.drop("col4", axis=1)
col1 col2 col3
0 1 1 1
1 2 2 2
2 3 3 3
누군가가 pandas / numpy / scipy에서 “축”이 무엇을 의미하는지 이해하도록 도와 줄 수 있습니까?
참고로 DataFrame.mean
잘못 정의되었을 수 있습니다. 것이 문서에 말한다 DataFrame.mean
이가 axis=1
열이 아닌 행에 걸쳐 평균을 뜻한다 …
답변
0 = down 및 1 = across 로 기억하는 것이 가장 간단합니다 .
이것은 다음을 의미합니다.
axis=0
각 열 아래 또는 행 레이블 (인덱스)에 메서드를 적용하는 데 사용 합니다.axis=1
각 행 또는 열 레이블에 방법을 적용하는 데 사용 합니다.
다음은 각 축이 참조하는 DataFrame의 부분을 보여주는 그림입니다.
Pandas가 NumPy의 단어 사용을 따른다는 것을 기억하는 것도 유용합니다 axis
. 사용법은 NumPy의 용어집에 설명되어 있습니다 .
축은 차원이 두 개 이상인 배열에 대해 정의됩니다. 2 차원 배열에는 두 개의 해당 축이 있습니다. 첫 번째 축은 행을 가로 질러 수직 으로 아래로 이동하고 (축 0) 두 번째 축은 열을 가로 질러 가로로 이동합니다 (축 1) . [ 내 강조점 ]
따라서 질문의 방법과 관련하여는 df.mean(axis=1)
올바르게 정의 된 것 같습니다. 열을 가로 질러 가로로 , 즉 각 개별 행을 따라 항목의 평균을 취합니다 . 반면에는 행에 걸쳐df.mean(axis=0)
수직 으로 아래쪽으로 작동하는 작업 입니다.
마찬가지로 df.drop(name, axis=1)
가로 축을 직관적으로 가로 지르기 때문에 열 레이블에 대한 작업을 나타냅니다. 지정 axis=0
하면 메서드가 대신 행에서 작동합니다.
답변
설명하는 또 다른 방법 :
// 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
답변
이미 적절한 답이 있지만 2 차원을 초과하는 또 다른 예를 들겠습니다.
파라미터 axis
는 변경할 축을 의미 합니다.
예를 들어 차원이 axbxc 인 데이터 프레임이 있다고 가정 합니다.
df.mean(axis=1)
차원이 ax 1 xc 인 데이터 프레임을 반환합니다 .df.drop("col4", axis=1)
차원이 ax (b-1) xc 인 데이터 프레임을 반환합니다 .
여기서, axis=1
상기 제 2 축선을 의미 b
하므로, b
값이 예에서 변화 될 것이다.
답변
문자열 별칭 ‘index’ 및 ‘columns’ 를 정수 0/1 대신 사용할 수 있다는 것이 더 널리 알려져 있습니다. 별칭은 훨씬 더 명확하며 계산이 어떻게 수행되는지 기억하는 데 도움이됩니다. ‘index’의 또 다른 별칭은 ‘rows’ 입니다.
때 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 / 인덱스 / 행으로 새 행 추가
이 결과를 사용하여 추가 행 또는 열을 추가하여 설명을 완료 해 보겠습니다. 따라서 axis = 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이면 왼쪽에서 오른쪽으로 열 방향으로 요소에 액세스하는 것을 의미합니다. axis = 1 따라 합계를 적용하면 각 행의 합계를 얻습니다.
아직도 혼란 스럽습니다! 그러나 위의 내용은 나를 조금 더 쉽게 만듭니다.
답변
다른 모든 답변이 혼란 스럽습니다. 내가 그것에 대해 어떻게 생각하는지 :
axis=0
: 결과의 모양이 수평 (행)
axis=1
: 결과의 모양이 수직 (열)
그래서
df.drop(name, axis=1)
: 컬럼 삭제df.mean(axis=1)
: 열을 계산합니다 (결과를 새 열로 추가 할 수 있음).