◎ pandas로 데이터 합치기
우리가 효과적인 데이터 분석을 하기 위해서는 여러개의 파일을 하나로 합치는 것이 필요하다.
- pd.concat() -> concatenate
- pd.merge -> Merge
▷ Concat(concatenate)
concat은 '더한다' 혹은 '붙인다'라는 의미로 생각하면 이해가 편하다.
예를 들어, 2개의 문자열을 + 연산자를 이용해 "붙일" 수 있다.
data.frame도 열이나 행을 기준으로 더할 수 있습니다. 간단한 예시를 보자.
- 인덱스가 같은경우
- 열방향의 병합이 default(행방향으로 하려면 axis=1 옵션추가
import pandas as pd
df1 = pd.DataFrame([['A', 'B'],
['C', 'D'],columns=list('1','2'))
df2 = pd.DataFrame([['E', 'F'],
['G', 'H'], columns=['1', '2',], index=[4, 5])
df1
1 2
0 A0 A1
1 B0 B1
df2
1 2
4 A4 A5
5 B4 B5
- 인덱스가 다른경우
- With python
import pandas as pd
x = pd.DataFrame([['AX','AY'],['BX','BY']], index = ['A','B'], columns = ['X','Y'])
y = pd.DataFrame([['AX','AZ'],['CX','CZ']], index = ['A','C'], columns = ['X','Z'])
pd.concat([x, y]) ## concate_by_row
pd.concat([x, y], axis = 1) ## concate_by_column
데이터프레임을 더할 때, 일반적으로는 더해지는 행, 열의 이름이나 인덱스 값이 일치해야 한다.
만약 그렇지 않은 경우, 비어있는 부분에 대해서는 (결측치를 의미하는) NaN 값으로 채워지게 된다.
▷ Merge
merge는 concat과 다르게 공통된 부분을 기반으로 합치기가 주요 용도이다.
- on 옵션을 통해 공통 칼럼 설정가능
- how를 통해 join형식 설정가능. Defualt는 inner join
- With python
import pandas as pd
left = pd.DataFrame({'key': ['K0', 'K4', 'K2', 'K3'],
'A': ['A0', 'A4', 'A2', 'A3'],
'B': ['B0', 'B4', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
- Left
- Right
- key를 기준으로 inner join 실행
pd.merge(left, right, on='key', how='inner')
- Concat VS Merge
새롭게 만들려고 하는 과정을 자세히 보면, 종목(종목코드) 를 기준으로 합친다는 것을 알 수 있다.
df2 = pd.DataFrame(
{'종목' : ['000080', '000890', '005300', '027740', '035810', '136480', '136490'],
'종목명': ['하이트진로', '보해양조', '롯데칠성', '마니커', '이지홀딩스', '하림', '선진'],
'테마' : ['주류', '주류', '주류', '육계', '육계', '육계', '돼지고기']}
)
df2
pd.concat([df, df2], axis = 1)
종목이라는 column은 중복되어 처리가 되어 있으며, 데이터가 비어있는 부분 (선진)도 있다.
물론 잘라내고 붙이는 방법도 있겠지만 조금 더 간편한 방법인 Merge를 시도해 볼 수 있을 것이다.
# Merge 문법
df.merge("붙일 내용", how = "(방법)", on ="(기준 feature)")
df = df.merge(df2, how = 'inner', on = '종목')
df
inner조인을 사용해서 공통적인 부분을 매칭해서 데이터를 합쳤다.
◎ Groupby
raw나 column을 같은 범주로 묶는 방법인데 raw별 column별 합계와 평균을 알고 싶을때 사용하는 함수이다.
일단 데이터 프레임을 불러와 보자
- 데이터는 코랩 샘플 데이터를 불러와서 예제에 사용
df = pd.read_csv('/content/sample_data/california_housing_train.csv')
df
total_rooms으로 groupby실행
- 보통 groupby의 범주는 번주형데이터로 하지만 현재 데이터는 범주형데이터가 없어서 임의로 설정
groups = df.groupby('total_rooms')
groups.size()
total_rooms
2.0 1
8.0 1
11.0 1
12.0 1
15.0 2
..
30401.0 1
30405.0 1
32054.0 1
32627.0 1
37937.0 1
Length: 5533, dtype: int64
total_rooms으로 그룹별 계산(mean, std, max, min)
groups.mean()
groups.max()
groups.aggregate([min,max]) #min, max 함께 출력
groups.aggregate(['mean','std']) # 평균, 표준편차 함께 출력
이렇게 원하는 결과에 따라서 Groupby함수로 출력이 가능한데 내가 자유자재로 쓰려면 많은 연습을 해야할 것이다.
'Python' 카테고리의 다른 글
[Python] 데코레이터 제대로 알고 사용하기 (1) | 2022.04.12 |
---|---|
[colab] 코랩에서 pandas로 데이터 불러오기(csv,json) (0) | 2022.02.20 |
pandas기초 _ Feature Engineering(String replace, Apply 사용법) (0) | 2021.05.18 |
pandas기초 _ 데이터 전처리(EDA란, Data Preprocessing) (0) | 2021.05.15 |