본문 바로가기

배우기/복습노트[Python과 분석]

[복습] Python 데이터 병합(pd.concat)

728x90
반응형

데이터를 병합하기 위하여 두 데이터 프레임을 가정하였다.

 

두 데이터프레임을 병합하기 위해서는 concat을 사용할 수 있다.

 

두 데이터 프레임을 전달할 때에는 위처럼 넣으면 안되고 묶어야 할 대상을 대괄호 안에 넣어야 한다.

 

위처럼 묶으면 되겠다.  axis = 0이 default이므로 행으로 붙여넣기가 된다.

 

pd.concat 함수를 자세히 살펴보자.

 

pd.concat(objs,                              # 병합할 대상(리스트로 전달)

                 axis = 0,                        # 병합 방향

                 join = 'outer',                 # 

                 ignore_index = False)   # index 재생성 여부

 

 

예) 시리즈의 결합

위와 같은 시리즈를 정의하였다.

 

시리즈의 원소 추가는 append로는 불가하다.

 

 

위처럼 없는 자리를 열어놓고 데이터 삽입을 하는 것은 가능하지만 권하는 방식이 아니다(새로운 값이 들어갈 자리에 직접 추가 가능 그러나 권장 X). R에서 가능한 방식이다.

 

concat을 사용해보겠다.

스칼라를 바로 넣으면 자료 구조가 맞지 않는다는 오류가 발생한다.

즉 스칼라로 추가는 불가하다. Series나 DataFrame의 형태로 전달이 필요하다.

 

 

위처럼 하여야 한다. 이렇게 시리즈의 원소 추가가 가능하다.

그런데 index가 기존 index가 그대로 유지된다.

 

ignore_index 옵션을 True로 설정하면 index가 정리가 된다.

 

 

 

 

예) 데이터프레임의 행 추가

 

df1에 행을 추가하기 위해서 위와 같은 방법을 수행하면 에러가 난다.

위 [10, 20, 30, 40]을 데이터 프레임으로 만들면 

이렇게 만들어지는데, Python은 컬럼 우선 순위어서 컬럼부터 채우려고 하기 때문이다. 

 

1행의 4열로 만들려면 2차원 구조로 유지하게끔 하면 되므로,

이렇게 하여야 한다.

 

 

즉, 참고로 작성해두자면,

4X1의 데이터프레임은 위와 같이 리턴할 수 있다.

 

 

1X4의 데이터프레임은 위와 같이 리턴할 수 있다.

 

 

다시 돌아와서, df1, df2 데이터 프레임을 합치고자 한다면,

df2의 columns를 df1과 동일시 한 데이터프레임을 생성 후 pd.concat으로 병합하면 되겠다.

 

 

 

예) 데이터프레임 컬럼 추가(병합)

 

 

728x90

 

 

연습문제

emp_1.xlsx, emp_2.xlsx, emp_3.xlsx 파일을 모두 합치기

엑셀은 위와 같이 불러올 수 있다.

 

각각의 데이터를 살펴보자.

 

 

 

 

데이터를 파악해보면, emp1과 emp2는 EMPNO로 join을 하면 되겠고, emp3은 행으로 이어 붙이면 되겠다.

 

728x90
반응형