파이썬 버전 3.8 기준
pandas 버전 1.1.1 기준
두 객체의 데이터 정렬을 위한 align() 메서드 |
본 포스팅에서는 align() 메서드의 사용법에 대해 다룬다.
align() 메서드 |
align() 메서드는 두 객체를 동시에 정렬하는 가장 빠른 방법이다.
○ 이 메서드는 두 객체를 정렬하여 두 객체로 구성된 튜플로 출력을 한다.
메서드 사용 형식)
result=object1.align(object2, join=None, axis=None, fill_value=np.NaN, method=None, limit=None)
각 입력 객체별 설명은 다음과 같다.
○ object1: 데이터를 정렬하기 위해 메서드가 적용되는 객체1(DataFrame, Series)이다.
○ object2: 데이터를 정렬하기 위해 메서드에 입력되는 객체2(DataFrame, Series)이다.
○ axis: 객체1이 DataFrame인 경우 정렬을 수행할 축을 입력받는다. 기본값으로는 두 축 모두 정렬을 수행한다.
▷ None: 기본값이며 두 축 모두 정렬을 수행시킨다.
▷ 'index' / 0 : 행에 대해서만 정렬을 수행시킨다.
▷ 'columns' / 1 : 열에 대해서만 정렬을 수행시킨다.
○ method: 정렬을 수행 후 누락값이 발생할 경우에 해당 값을 채우는 방식을 입력받는다.
○ fill_value: 정렬을 수행한 후 누락값이 발생할 경우에 해당 값을 채울 값을 입력받는다.
○ limit: 누락값이 연속적으로 여러 개 존재할 때 method방식에 따라 누락 값을 채우는 개수를 제한한다.
※ method, fill_value, limit 옵션의 상세 내용은 reindex() 메서드(링크)와 동일하다.
이 메서드의 핵심은 join 입력변수이므로 이는 따로 설명한다.
join입력변수에 다음과 같은 입력에 따라 출력되는 값을 조절할 수 있다.
○ join='outer': 두 객체 인덱스를 합하여 출력이 된다. (기본값)
▷ 즉, 인덱스가 합집합으로 출력된다.
▷ 한쪽에만 존재하는 인덱스라면 다른쪽 인덱스에 해당하는 값은 NaN(누락값)이 입력되어 출력된다.
○ join='left': 호출하는 객체(object1)의 인덱스를 사용한다.
○ join='right': 입력되는 객체(object2)의 인덱스를 사용한다.
○ join='inner': 두 객체 둘다 있는 인덱스를 교차시킨다.
▷ 즉, 인덱스가 교집합으로 출력된다.
align() 메서드 사용 예제 |
본 포스팅에서는 다음과 같이 pandas와 numpy를 import시킨 후 예제를 수행하였다.
○ 본 포스팅에서는 numpy는 딱히 쓰지는 않지만 습관적으로 그랬다.
모듈의 임폴트)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
Series에 대한 align()메서드 사용예제
이는 둘 다 재인덱스된 Series를 사용하여 튜플을 반환한다.
Series에 대한 align() 메서드 사용 예제)
# 예제 Series의 정의
In[4]: sample_s = pd.Series([1.1, 2.2, 3.3, 4.4, 5.5], index=['a', 'b', 'c', 'd', 'e'])
In[5]: sample_s1 = sample_s[:4]
In[6]: sample_s2 = sample_s[1:]
# 기본적인 align() 메서드 사용
In[7]: sample_s1.align(sample_s2)
Out[7]:
(a 1.1
b 2.2
c 3.3
d 4.4
e NaN
dtype: float64,
a NaN
b 2.2
c 3.3
d 4.4
e 5.5
dtype: float64)
# join 입력변수 사용('inner')
In[8]: sample_s1.align(sample_s2, join='inner')
Out[8]:
(b 2.2
c 3.3
d 4.4
dtype: float64,
b 2.2
c 3.3
d 4.4
dtype: float64)
# join 입력변수 사용('left')
In[9]: sample_s1.align(sample_s2, join='left')
Out[9]:
(a 1.1
b 2.2
c 3.3
d 4.4
dtype: float64,
a NaN
b 2.2
c 3.3
d 4.4
dtype: float64)
DataFrame에 대한 align()메서드 사용예제
DataFrame에 대한 align() 메서드 사용 예제)
# 예제 DataFrame의 정의
In[10]: sample_df=pd.DataFrame([[1.1, 1.2, 1.3, 1.4], [2.1, 2.2, 2.3, 2.4], [3.1, 3.2, 3.3, 3.4]], index=['a', 'b', 'c'], columns=['A','B','C','D'])
In[11]: sample_df2=pd.DataFrame([[0, 1, 2], [3, 4, 5]], index=['a', 'c'], columns=['B','C','D'])
# 기본적인 align() 메서드 사용
In[12]: sample_df.align(sample_df2)
Out[12]:
( A B C D
a 1.1 1.2 1.3 1.4
b 2.1 2.2 2.3 2.4
c 3.1 3.2 3.3 3.4,
A B C D
a NaN 0.0 1.0 2.0
b NaN NaN NaN NaN
c NaN 3.0 4.0 5.0)
# join 입력변수 사용('inner')
In[13]: sample_df.align(sample_df2, join='inner')
Out[13]:
( B C D
a 1.2 1.3 1.4
c 3.2 3.3 3.4,
B C D
a 0 1 2
c 3 4 5)
사용자는 또한 axis 옵션을 사용하여 한쪽 축에만 정렬을 수행할 수 있다..
○ axis 옵션은 정렬할 축을 명시한다.
○ None: 기본값이며 두 축 모두 정렬을 수행시킨다.
○ 'index' / 0 : 행에 대해서만 정렬을 수행시킨다.
○ 'columns' / 1 : 열에 대해서만 정렬을 수행시킨다.
한쪽 축에만 정렬 수행 예제)
# 행방향으로만 정렬 수행 예제 axis = 0 / 'index'
In[14]: sample_df.align(sample_df2, join='inner', axis=0)
Out[14]:
( A B C D
a 1.1 1.2 1.3 1.4
c 3.1 3.2 3.3 3.4,
B C D
a 0 1 2
c 3 4 5)
# 열방향으로만 정렬 수행 예제 axis = 1 / 'columns'
In[15]: sample_df.align(sample_df2, join='inner', axis=1)
Out[15]:
( B C D
a 1.2 1.3 1.4
b 2.2 2.3 2.4
c 3.2 3.3 3.4,
B C D
a 0 1 2
c 3 4 5)
DataFrame과 Series에 대한 align()메서드 사용예제
사용자가 Series를 DataFrame.align() 메서드에 입력한다면, 사용자는 axis 입력변수를 사용하여 두 객체를 DataFrame 인덱스 혹은 열에 대해 정렬할 것인지 결정할 수 있다.
모듈의 임폴트)
# pandas와 numpy의 import
In[16]: sample_df.align(sample_s, axis=0)
Out[16]:
( A B C D
a 1.1 1.2 1.3 1.4
b 2.1 2.2 2.3 2.4
c 3.1 3.2 3.3 3.4
d NaN NaN NaN NaN
e NaN NaN NaN NaN,
a 1.1
b 2.2
c 3.3
d 4.4
e 5.5
dtype: float64)
|
두 객체를 join 입력변수에 입력된 방법을 통해 각각의 축에 대해 정렬한다.
DataFrame.align(other, join='outer', axis=None, level=None, copy=True, fill_value=None, method=None, limit=None, fill_axis=0, broadcast_axis=None) |
other: DataFrame or Series
비교 정렬을 수행할 객체를 입력받는다.
join: {‘outer’, ‘inner’, ‘left’, ‘right’}, default ‘outer’
정렬 수행 시 인덱스의 처리 방법에 대한 방법을 입력받는다.
기본값은 'outer'이며 두 인덱스의 합집합으로 결과가 출력된다.
○ join='outer': 두 객체 인덱스를 합하여 출력이 된다. (기본값)
▷ 즉, 인덱스가 합집합으로 출력된다.
▷ 한쪽에만 존재하는 인덱스라면 다른쪽 인덱스에 해당하는 값은 NaN(누락값)이 입력되어 출력된다.
○ join='left': 호출하는 객체(object1)의 인덱스를 사용한다.
○ join='right': 입력되는 객체(object2)의 인덱스를 사용한다.
○ join='inner': 두 객체 둘다 있는 인덱스를 교차시킨다.
▷ 즉, 인덱스가 교집합으로 출력된다.
axis: allowed axis of the other object
기본값은 None이다.
정렬하기 위한 축을 설정한다.
○ None : None이 입력되면 두 축 모두에 대해 정렬을 수행한다.
○ 'index' / 0 : 'index'나 0이 입력될 경우 행(row)에 대해 정렬을 수행한다.
○ 'columns' / 1 : 'columns'이나 1이 입력될 경우 열(columns)에 대해 정렬을 수행한다.
level: int or level name
기본값은 None이다.
입력된 MultiIndex level의 Index 값과 일치하는 level에 걸쳐 브로드캐스팅을 수행한다.
copy: bool
기본값은 True이다.
항상 새로운 객체를 반환한다.
만약 False가 입력되고 reindexing이 요구되지 않는다면, 그때에는 기존 객체가 반환된다.
fill_value: scalar
기본값은 np.NaN이다.
누락값에 채우고자 하는 값을 입력받는다.
method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}
기본값은 None이다.
재인덱싱되는 Series 안에서 누락값을 채우기 위한 방법을 입력받는다.
○ pad/ffill: 마지막 유효한 관측치를 다음 유효한 관측치로 전파한다.
○ backfill/ bfill: 빈 데이터를 채우기 위해, 다음 관측치를 사용한다.
limit: int
기본값은 None이다.
연속적인 누락값(NaN)을 채우는 최대 숫자를 입력받는다.
다르게 표현하면 만약에 연속적인 누락값(NaN)들의 수가 limit에 입력된 수보다 크다면 누락값들이 부분적으로 채워진다.
만약 이 변수에 입력이 되지 않는다면 method에 입력된 방법을 통해 모든 누락값(NaN)이 채워진다.
해당 값이 입력되면 0보다 커야한다.
fill_axis: {0 or ‘index’, 1 or ‘columns’}, default 0
기본값은 0이다.
axis, method, limit을 채운다.(??)
broadcast_axis: {0 or ‘index’, 1 or ‘columns’}
기본값은 None이다.
만약 다른 차원의 두 객체를 정렬 시킬때, 입력된 축을 따라 브로드캐스팅을 수행한다.
|
|
|
| 참고자료 https://pandas.pydata.org/docs/user_guide/basics.html https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.align.html |
|
|
|
|
'Python > Pandas' 카테고리의 다른 글
연속적인 함수적용을 위한 pipe() 메서드-pandas(31) (0) | 2020.10.05 |
---|---|
인덱스(레이블) 수정을 위한 rename() 메서드-pandas(30) (0) | 2020.09.13 |
인덱스 정렬(순서 변경)을 위한 reindex() 메서드- pandas(28) (0) | 2020.09.08 |
데이터셋활용 누락값 채우기, 데이터 조합-pandas(27) (0) | 2020.04.21 |
불린리덕션(empty, any, all, bool)-pandas(26) (0) | 2020.04.19 |
댓글