티스토리 뷰
DataFrame의 결합 (Merge)
- Database Table의 join 기능
- 두 개의 DataFrame을 연결시켜서 새로운 DataFrame을 만든다.
학번을 기준으로 JOIN => 학번이 같은 것만 뽑혀서 나온다.
- INNER JOIN : INTERSECT
- FULL OUTER JOIN : UNION
- LEFT OUTER JOIN : (df1-df2) + INTERSECT
- RIGHT OUTER JOIN : (df2-df1) + INTERSECT
import numpy as np
import pandas as pd
data1 = {'학번': [1, 2, 3, 4],
'이름': ['이지안', '박동훈', '이순신', '강감찬'],
'학년': [2, 4, 1, 3]}
data2 = {'학번': [1, 2, 4, 5],
'학과': ['CS', 'MATH', 'MATH', 'CS'],
'학점' : [3.4, 2.9, 4.5, 1.2]}
df1 = pd.DataFrame(data1)
display(df1)
df2 = pd.DataFrame(data2)
display(df2)
#####INNER JOIN #############
result = pd.merge(df1, df2, on='학번', how='inner')
display(result)
result = pd.merge(df1, df2, on='학번', how='outer')
display(result)
result = pd.merge(df1, df2, on='학번', how='left')
display(result)
result = pd.merge(df1, df2, on='학번', how='right')
display(result)
Merage - 여러가지 경우에 대한 사용법..
컬럼명이 다를 경우
# 만약 컬럼명이 다르다면
import numpy as np
import pandas as pd
data1 = {'학번': [1, 2, 3, 4],
'이름': ['이지안', '박동훈', '이순신', '강감찬'],
'학년': [2, 4, 1, 3]}
data2 = {'학생학번': [1, 2, 4, 5],
'학과': ['CS', 'MATH', 'MATH', 'CS'],
'학점' : [3.4, 2.9, 4.5, 1.2]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
display(df1)
display(df2)
################################
result = pd.merge(df1, df2,
left_on='학번',
right_on='학생학번', how='inner')
display(result)
DataFrame의 column과 index를 이용한 range
import numpy as np
import pandas as pd
data1 = {'학번': [1, 2, 3, 4],
'이름': ['이지안', '박동훈', '이순신', '강감찬'],
'학년': [2, 4, 1, 3]}
data2 = {'학과': ['CS', 'MATH', 'MATH', 'CS'],
'학점' : [3.4, 2.9, 4.5, 1.2]}
df1 = pd.DataFrame(data1)
display(df1)
# 학번을 index로 사용
df2 = pd.DataFrame(data2,
index=[1, 2, 4, 5])
display(df2)
############################################
result = pd.merge(df1, df2,
left_on='학번',
right_index=True,
how='inner')
display(result)
# result.loc[2] # 2번 X key error, 표기된 인덱스 기반
display(result.iloc[2]) # 숫자 인덱스 기반
display(result.loc[3])
# DataFrame의 index를 이용한 merge
import numpy as np
import pandas as pd
data1 = {
'이름': ['이지안', '박동훈', '이순신', '강감찬'],
'학년': [2, 4, 1, 3]}
data2 = {'학과': ['CS', 'MATH', 'MATH', 'CS'],
'학점' : [3.4, 2.9, 4.5, 1.2]}
# 학번을 index로 사용.
df1 = pd.DataFrame(data1,
index=[1, 2, 3, 4])
df2 = pd.DataFrame(data2,
index=[1, 2, 4, 5])
display(df1)
display(df2)
############################################
result = pd.merge(df1, df2,
left_index=True,
right_index=True,
how='inner')
display(result)
Concatenation (연결)
- Series를 1차원, 2차원으로 연결하는 방법
- Series는 1차원 vector 형태이다.
- 연결하는 방법은 2가지 방법이 있다.
- 행방향 연결, 열 방향 연결
# concatenation(연결)
import numpy as np
import pandas as pd
s1 = pd.Series([0, 1], index=['a', 'c'])
s2 = pd.Series([4, 3, 2], index=['b', 'c', 'e'])
s3 = pd.Series([5, 6], index=['f', 'g'])
print(s1)
print(s2)
print(s3)
# Series는 1차원 vector 형태이다.
# 연결하는 방법은 2가지 방법이 있다.
# 행방향 연결, 열 방향 연결
display(pd.concat([s1, s2, s3], axis=0)) # Series를 1차원으로 연결
display(pd.concat([s1, s2, s3], axis=1, sort=True))
DataFrame 연결
# DataFrame 연결
import numpy as np
import pandas as pd
df1 = pd.DataFrame(np.arange(6).reshape(3, 2),
index = ['a', 'b', 'c'],
columns = ['one', 'two'])
df2 = pd.DataFrame(5 + np.arange(4).reshape(2, 2),
index = ['a', 'b'],
columns = ['three', 'four'])
display(df1)
display(df2)
###################################################
# 인덱스 기준으로 붙는다.
# axis=1
result = pd.concat([df1, df2],
axis=1,
sort=True) # column 정렬
display(result)
# axis=0
# ignore_indes=False, # 인덱스 다시 설정x
# sort=True => column 정렬
result = pd.concat([df1, df2],
axis=0,
ignore_index=False,
sort=True)
display(result)
# axis=0
# ignore_indes=True, # 인덱스 다시 정렬
# sort=True => column 정렬
result = pd.concat([df1, df2],
axis=0,
ignore_index=True,
sort=True)
display(result)
'멀티캠퍼스 AI과정 > 04 Pandas' 카테고리의 다른 글
Pandas 04 - DataFrame Grouping (0) | 2020.09.15 |
---|---|
Pandas 04 - 결측치 처리 (0) | 2020.09.15 |
Pandas 03 - DataFrame 집계함수, 통계기반 함수, 정렬, apply와 lambda (0) | 2020.09.15 |
Pandas 02 - DataFrame describe(), indexing, 행/칼럼 추가, 삭제 (0) | 2020.09.11 |
Pandas 02 - DataFrame (2차원) (0) | 2020.09.09 |
댓글