python으로 데이터를 분석하거나, SQL 디버깅 작업 중 pandas를 많이 사용하는데,
사이즈가 다른 두 개의 DataFrame을 하나의 컬럼을 기준으로 SQL처럼 JOIN 문을 사용하듯이 JOIN을 수행할 수 있다.
Inner Join
예를 들어, 아래와 같이 df1과 df2 두 개의 DataFrame이 있다고 가정해보자.
import pandas as pd
df1 = pd.DataFrame({'k_id': [1, 2, 3, 4], 'A': [10, 20, 30, 40]})
df2 = pd.DataFrame({'k_id': [2, 3], 'B': [50, 60]})
이제 두 개의 DataFrame을 Inner Join 하기 위해서는 merge() 함수를 사용한다. 이때, on 파라미터에 기준이 되는 컬럼을 지정하고, how 파라미터에 Inner Join을 수행하도록 지정한다.
result = pd.merge(df1, df2, on='k_id', how='inner')
결과적으로 result DataFrame에는 df1 DataFrame과 df2 DataFrame에서 모두 k_id 컬럼 값이 일치하는 행만 남는다.
# 결과
k_id A B
0 2 20 50
1 3 30 60
Left Outer Join
result = pd.merge(df1, df2, on='k_id', how='left')
.merge() 메서드의 how 옵션만 'left'로 바꾼다.
Right Outer Join
result = pd.merge(df1, df2, on='k_id', how='right')
.merge() 메서드의 how 옵션만 'right'로 바꾼다.
Full Outer Join
result = pd.merge(df1, df2, on='k_id', how='outer')
.merge() 메서드의 how 옵션만 'outer'로 바꾼다.
잠깐!
Left든, Right든 Full이든 Outer Join을 수행하면, k_id에 의해 Join되지 않은 값들은 모두 NaN으로 처리된다.
* NaN에 대한 처리는 pandas의 .fillna() 메서드나 .replace() 메서드로 다른 값으로 대체할 수 있다.
.fillna()
result.fillna(0, inplace=True)
NaN 값을 0으로 대체되며, inplace=True 옵션에 의해 result DataFrame 자체에 즉시 수정이 된다.
.replace()
result.replace(np.nan, 0, inplace=True)
마찬가지로, NaN 값을 0으로 대체되며, inplace=True 옵션에 의해 result DataFrame 자체에 즉시 수정이 된다.
'Python > pandas' 카테고리의 다른 글
[pandas] TypeError: unsupported operand type(s) for *: 'float' and 'decimal.Decimal' 해결기 (0) | 2023.05.08 |
---|---|
[python] pandas DataFrame Index 초기화 (0) | 2023.02.22 |