concat함수는 데이터를 재구조화할 때 가장 많이 사용하는 함수 중 하나일 것이다.
다양한 테이블을 방향에 상관없이 merging할 때 많이 쓰인다.
Pandas에 merge라는 메소드가 따로 존재함에도, merge보다 concat함수를 많이 사용한다.
merge의 경우 테이블 병합이 2개까지만 이루어지지만, concat의 경우 리스트 형태로 합치기 때문에 더욱 실용적이다.
기본 문법
pd.concat(objs,
axis = 0, # 0일 경우 행병합(위아래 합치기) 1일 경우 열병합(좌우로 합치기). Default는 0.
join = 'outer', # 'outer'의 경우 outer join, 'inner'의 경우 inner join. Optional.
ignore_index = False, # True일 경우 기존의 index를 저장하지 않음. Default는 False.
keys, # 계층적 index를 사용할 때 사용하는 속성
names, # index의 이름 부여할 때 사용하는 속성
copy = False, # 복사
join_axes, 특정 DataFrame의 index를 이용할 때 사용하는 속성
verify_integrity = False # True일 경우 index가 중복되었는 지 확인
)
objs속성은 리스트 형태로 데이터프레임을 묶어 채우면 된다.
해당 함수를 사용할 때 응용하는 방법에 대해 정리해보자.
같은 데이터프레임 반복하여 채우기
같은 데이터프레임을 repeat하여 채우고 싶을 때 사용할 수 있다.
Pandas의 경우 repeat함수는 Series에 대해서만 제공하고 있기 때문에,
데이터프레임 자체를 반복 및 복사하고 싶을 때는 concat을 응용하여 사용하면 된다.
pd.concat([df]*ntimes, ignore_index = True) # 기존의 index를 무시하고 ntimes만큼 df를 복사하기.
리스트 컴프리헨션과 섞어 사용하기
위에서도 언급했듯 concat의 속성 objs는 다중 데이터프레임을 한번에 합칠 때 사용하기 용이하다.
특히 list형태로 input을 주로 사용하는데,
이는 리스트 컴프리헨션을 사용하면 조건부로 데이터프레임을 합칠 수 있다는 의미이기도 하다.
아래는 sheet가 많은 Excel파일을 합쳐 groupby하여 집계할 때 사용한 응용 사례이다.
# sheet가 많은 엑셀 한번에 불러오기
month = pd.read_excel('excel.xlsx',sheet_name=None)
# 엑셀 sheet별로 concat한 뒤 column1에 대해 group화하고 column2의 합을 구하기
month_total = pd.concat([df for name, df in month.items()], ignore_index=True).groupby('column1').sum()['column2']
또는 빈 데이터프레임을 자동으로 예외 처리하여 concat할 때 사용할 수 있다.
# 기존의 인덱스를 무시하고 빈 데이터프레임을 제외한 데이터프레임들 합치기
df_list= [df1, df2, df3]
pd.concat([df for df in df_list if len(df) != 0], ignore_index = True)
'Python > pandas' 카테고리의 다른 글
같은 column에서 numeric 자료만 골라내기 (0) | 2021.12.15 |
---|---|
Pandas에서 DateTime Indexing 응용하기 (0) | 2021.08.12 |
Pandas에서 결측치를 채워넣는 여러 방법들 (0) | 2021.07.13 |