📍 데이터병합
✅ concat()
: pd.concat([df1, df2], axis, join, ignore_index=True/False)
- axis : 0(default값) 행방향 / 1 열방향 결합
- join : 'inner' / 'outer'(default값)
- ignore_index=True : index 초기화
In [1]:
import pandas as pd
import numpy as np
df1=pd.DataFrame(
np.arange(6).reshape(3,2),
index=['a','b','c'],
columns=['데이터1','데이터2']
)
df1
Out[1]:
In [2]:
df2=pd.DataFrame(
5+np.arange(4).reshape(2,2),
index=['a','c'],
columns=['데이터2','데이터4']
)
df2
Out[2]:
In [3]:
pd.concat([df1, df2], axis=1)
Out[3]:
In [4]:
pd.concat([df1, df2], axis=0)
Out[4]:
In [5]:
pd.concat([df1,df2], axis=1, join='inner')
Out[5]:
In [6]:
pd.concat([df1,df2], axis=0, join='inner')
Out[6]:
In [7]:
test = pd.concat([df1,df2], axis=1, join='inner', keys=['x','y'])
test
Out[7]:
In [8]:
test.x.데이터1
Out[8]:
a 0
c 4
Name: 데이터1, dtype: int64
✅ merge()
: 공통된 key값(column)을 가지고 있을 시 병합 가능
pd.merge(df1, df2, how)
- how : left, right, outer, inner(default값)
In [9]:
df1 = pd.DataFrame({
'고객명': ['박세리', '이대호', '손흥민', '김연아', '마이클조던'],
'생년월일': ['1980-01-02', '1982-02-22', '1993-06-12', '1988-10-16', '1970-03-03'],
'성별': ['여자', '남자', '남자', '여자', '남자']})
df1
Out[9]:
In [10]:
df2 = pd.DataFrame({
'고객명': ['김연아', '박세리', '손흥민', '이대호', '타이거우즈'],
'연봉': ['2000원', '3000원', '1500원', '2500원', '3500원']})
df2
Out[10]:
In [11]:
# how='inner'(defalut) : df1, df2 중복된 요소만 병합
pd.merge(df1, df2)
Out[11]:
In [12]:
# how='left' : df1(left) 기준으로 병합
pd.merge(df1, df2, how='left')
Out[12]:
In [13]:
# how='right' : df2(right) 기준으로 병합
pd.merge(df1, df2, how='right')
Out[13]:
In [14]:
# how='outer' : df1, df2의 모든 데이터 병합
pd.merge(df1, df2, how='outer')
Out[14]:
: 병합하려는 column의 이름이 다른 경우
pd.merge(df1, df2, left_on='df1_column', right_on='df2_column')
In [15]:
df1 = pd.DataFrame({
'이름': ['박세리', '이대호', '손흥민', '김연아', '마이클조던'],
'생년월일': ['1980-01-02', '1982-02-22', '1993-06-12', '1988-10-16', '1970-03-03'],
'성별': ['여자', '남자', '남자', '여자', '남자']})
df1
Out[15]:
In [16]:
df2 = pd.DataFrame({
'고객명': ['김연아', '박세리', '손흥민', '이대호', '타이거우즈'],
'연봉': ['2000원', '3000원', '1500원', '2500원', '3500원']})
df2
Out[16]:
In [17]:
pd.merge(df1, df2, left_on='이름', right_on='고객명')
Out[17]:
: 이름이 같은 column이 여러개 있는 경우
이름이 같아도 키가 되면 안되는 열이 있을 때 on 인수로 기준열을 명시
pd.merge(df1, df2, on='column')
In [18]:
df1 = pd.DataFrame({
'이름': ['박세리', '이대호', '손흥민', '김연아', '마이클조던'],
'생년월일': ['1980-01-02', '1982-02-22', '1993-06-12', '1988-10-16', '1970-03-03'],
'데이터': ['여자', '남자', '남자', '여자', '남자']})
df1
Out[18]:
In [19]:
df2 = pd.DataFrame({
'이름': ['김연아', '박세리', '손흥민', '이대호', '타이거우즈'],
'데이터': ['2000원', '3000원', '1500원', '2500원', '3500원']})
df2
Out[19]:
In [20]:
# 데이터 column은 값의 의미가 다름(키로 사용되면 안됨)
# 기준열을 on을 통해 직접 지정(반환 결과에 동일 필드명이 있을 경우 column_x, column_y로 변경해서 표현
pd.merge(df1,df2, on='이름')
Out[20]:
: index를 기준으로 병합
pd.merge(df1, df2, left_index=True/False, right_index=True/False)
In [21]:
df1 = pd.DataFrame([[1.,2.],[3.,4.],[5.,6.]],
index=['봄','여름','겨울'],
columns=['서울','부산'])
df1
Out[21]:
In [22]:
df2 = pd.DataFrame([[7.,8.],[9.,10.],[11.,12.],[13.,14.]],
index=['초여름','여름','가을','겨울'],
columns=['대구','광주'])
df2
Out[22]:
In [23]:
# 기준이 모두 index로 처리되어 있는 경우 index는 기존 index를 사용
pd.merge(df1, df2, left_index=True, right_index=True, how='outer')
Out[23]:
✅ join()
: df1.join(df2, how)
- how : left, right, outer, inner(default값)
In [24]:
df1.join(df2, how='outer')
Out[24]:
'Pandas' 카테고리의 다른 글
[Pandas / 시각화] 판다스 다중그래프, 데이터프레임활용 - subplots, savefig (0) | 2024.01.15 |
---|---|
[Pandas / 시각화] 판다스 matplitlib기본 - 한글폰트설정, title, 축, 범례 (1) | 2024.01.15 |
[Pandas / 기초] 판다스 그룹화 - groupby, pivot_table (0) | 2024.01.10 |
[Pandas / 기초] 판다스 데이터수정 - replace, rename, lower, apply, lambda (1) | 2024.01.10 |
[Pandas / 기초] 판다스 데이터추가, 삭제 - loc, drop, datetime, date_range, to_datetime (0) | 2024.01.10 |