코드 프레소 [파이썬으로 배우는 데이터 분석: Pandas] 강의 내용 정리
# 데이터 합치기..?
실생활에서도 여러 데이터를 하나로 합쳐 분석을 해야하는 경우가 빈번히 발생한다. 데이터를 합칠 때 데이터의 형식 또는, 데이터에 담긴 내용이 일치하는 경우도 있겠지만 데이터 생성에 표준이 자세히 정해지지 않았다면 일치하는 경우는 드물다. 따라서 내가 원하는 형식으로 데이터를 합쳐 가공하기 위해서는 그 방법을 정확히 숙지해야한다.
Pandas 라이브러리에서는 데이터를 합치기 위한 방법으로 pandas.concat()을 제공한다. 이는 2개 이상의 Series 또는, DataFrame 객체들을 하나로 합친다.
# API Reference
# pandas.concat
API Reference:: pandas.concat()
# parameter 정리
- objs (sequence or mapping of Series or DataFrame objects):
- 시리즈나 데이터프레임 객체들의 시퀀스 또는 매핑.
- 매핑이 전달되면, 키로 사용할 값을 정렬된 순서로 사용한다. 모든 객체가 None일 경우 ValueError가 발생하며, 일부만 None일 경우 해당 객체는 조용히 무시된다.
- axis ({0/’index’, 1/’columns’}, 기본값 0):
- 연결할 축을 지정.
- 0은 행, 1은 열을 따라 데이터를 연결한다.
- join ({‘inner’, ‘outer’}, 기본값 ‘outer’):
- 다른 축(또는 축들)에 있는 인덱스를 어떻게 처리할지 결정.
- outer는 인덱스를 병합하고, inner는 교집합으로 병합한다.
- ignore_index (bool, 기본값 False):
- True로 설정하면 연결하는 축에서 인덱스 값을 사용하지 않고, 결과 축에 0, …, n - 1로 레이블을 지정한다.
- 다른 축의 인덱스 값은 join 옵션에 따라 처리된다.
- keys (sequence, 기본값 None):
- 계층적 인덱스를 구성할 때 사용할 키를 전달한다. 여러 레벨을 전달하면 튜플로 포함되어야 하며, 전달된 키를 가장 바깥쪽 레벨로 사용해 MultiIndex를 구성한다.
- levels (list of sequences, 기본값 None):
- MultiIndex를 구성할 때 사용할 특정 레벨(고유값)을 지정한다. 지정하지 않으면 키에서 추론한다.
- names (list, 기본값 None):
- 결과 계층적 인덱스에서 사용할 레벨 이름 목록을 지정한다.
- verify_integrity (bool, 기본값 False):
- 새로 연결된 축에 중복이 있는지 검사한다. 이는 실제 데이터 연결에 비해 매우 비용이 많이 들 수 있다.
- sort (bool, 기본값 False):
- 이미 정렬되지 않은 경우, 비연결 축을 정렬한다. 단, 비연결 축이 DatetimeIndex이고, join='outer'일 경우, 축이 정렬되지 않았더라도 축은 항상 사전순으로 정렬된다.
- copy (bool, 기본값 True):
- False로 설정하면 데이터가 불필요하게 복사되지 않는다.
# 예시코드 : pandas.concat을 활용해 여러 DataFrame 합치기
import pandas as pd
# 실습 데이터 생성
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7])
df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']},
index=[8, 9, 10, 11])
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index=[2, 3, 6, 7])
print('DF1')
print(df1)
print('\nDF2')
print(df2)
print('\nDF3')
print(df3)
print('\nDF4')
print(df4)
'''
df2, df1 합치기
'''
print('\n#1 Concat df2, df1')
result = pd.concat([df2,df1,df3],ignore_index = True)
print(result)
DF1
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
DF2
A B C D
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
DF3
A B C D
8 A8 B8 C8 D8
9 A9 B9 C9 D9
10 A10 B10 C10 D10
11 A11 B11 C11 D11
DF4
B D F
2 B2 D2 F2
3 B3 D3 F3
6 B6 D6 F6
7 B7 D7 F7
#1 Concat df2, df1
A B C D
0 A4 B4 C4 D4
1 A5 B5 C5 D5
2 A6 B6 C6 D6
3 A7 B7 C7 D7
4 A0 B0 C0 D0
5 A1 B1 C1 D1
6 A2 B2 C2 D2
7 A3 B3 C3 D3
8 A8 B8 C8 D8
9 A9 B9 C9 D9
10 A10 B10 C10 D10
11 A11 B11 C11 D11
# 예시코드 : pandas.concat을 활용해 shape이 다른 DataFrame 합치기
import pandas as pd
# 실습 데이터 생성
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7])
df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']},
index=[8, 9, 10, 11])
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index=[2, 3, 6, 7])
'''
shape 이 서로 다른 df1, df4 합치기
'''
print('\n#2 Concat df1, df4')
result = pd.concat([df1,df4])
print(result)
#2 Concat df1, df4
A B C D F
0 A0 B0 C0 D0 NaN
1 A1 B1 C1 D1 NaN
2 A2 B2 C2 D2 NaN
3 A3 B3 C3 D3 NaN
2 NaN B2 NaN D2 F2
3 NaN B3 NaN D3 F3
6 NaN B6 NaN D6 F6
7 NaN B7 NaN D7 F7
# 예시코드 : pandas.concat을 활용해 shape이 다른 DataFrame 합치기
import pandas as pd
# 실습 데이터 생성
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7])
df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']},
index=[8, 9, 10, 11])
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index=[2, 3, 6, 7])
'''
슬라이싱을 통해 일부 데이터 합치기
'''
print('\n#3 Concat df1, df4 by slicing')
result = pd.concat([df1[:2],df4[3:]])
print(result)
#3 Concat df1, df4 by slicing
A B C D F
0 A0 B0 C0 D0 NaN
1 A1 B1 C1 D1 NaN
7 NaN B7 NaN D7 F7
# 예시코드 : pandas.concat을 활용해 행 기준으로 DataFrame 합치기
import pandas as pd
# 실습 데이터 생성
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7])
df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']},
index=[8, 9, 10, 11])
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index=[2, 3, 6, 7])
'''
행 기준으로 df1, df4 합치기
'''
print('\n#4 Concat df1, df4 by axis=1')
result = pd.concat([df1,df4],axis=1, ignore_index=True)
print(result)
#4 Concat df1, df4 by axis=1
0 1 2 3 4 5 6
0 A0 B0 C0 D0 NaN NaN NaN
1 A1 B1 C1 D1 NaN NaN NaN
2 A2 B2 C2 D2 B2 D2 F2
3 A3 B3 C3 D3 B3 D3 F3
6 NaN NaN NaN NaN B6 D6 F6
7 NaN NaN NaN NaN B7 D7 F7
# 예시코드 : pandas.concat을 활용해 교집합으로 DataFrame 합치기
import pandas as pd
# 실습 데이터 생성
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7])
df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']},
index=[8, 9, 10, 11])
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index=[2, 3, 6, 7])
'''
교집합으로 데이터 결합하기
'''
print('\n#5 Concat df1, df4 by join=inner')
result = pd.concat([df1,df4], join = 'inner', axis=1)
print(result)
#5 Concat df1, df4 by join=inner
A B C D B D F
2 A2 B2 C2 D2 B2 D2 F2
3 A3 B3 C3 D3 B3 D3 F3
'공부한 것들.. > Pandas' 카테고리의 다른 글
Pandas 데이터 그룹화 (1) | 2024.09.14 |
---|---|
Pandas 집계함수 (0) | 2024.09.14 |
Pandas 인덱싱(Indexing) & 슬라이싱(Slicing) (0) | 2024.09.14 |
Pandas 결측치 이해 및 결측치 처리 (2) | 2024.09.14 |
Pandas 데이터 파일 읽기 (1) | 2024.09.14 |