비슷한 듯 다른 문법이 너무 많다. 데이터프레임 병합하는 panda 함수들...
[1] concat() : 데이터프레임을 물리적으로 연결시켜 준다.
pd.concat([df1, df2], axis=0, ignore_index=True, join='inner')
# axis=0(디폴트) : 행, 밑으로 붙임
# axis=1 : 열, 오른쪽으로 붙임
# ignore_index=True : 인덱스 재배열
# join='inner' : null값(행과 열 등이 맞지 않아 생기는 NaN)을 제외한 교집합
# join 옵션은 outer join이 디폴트 : null(NaN)값이 나옴
df=pd.Series(['s0','s1','s2','s3'], name='Ss'] # name : 컬럼명
pd.concat([df1, Ss], axis=1) # 열을 붙이는 거니 axis=1
df1=pd.Series(['s0','s1','s2','s3'], name='Ss1']
df2=pd.Series(['s4','s5','s6','s7'], name='Ss2']
pd.concat([Ss1,Ss2], axis=0, ignore_index=True)) # 행으로 병합
pd.concat([Ss1,Ss2], axis=1)) # 열로 병합
[2] merge() : 병합하고자 하는 두 데이터프레임의 고유값(key)을 기준으로 병합
df1=pd.DataFrame({
'data1':range(4),
'key':list('aabc')
})
df2=pd.DataFrame({
'data2':range(3),
'key':list('acd')
})
data1 key
0 0 a
1 1 a
2 2 b
3 3 c
data2 key
0 0 a
1 1 c
2 2 d # 데이터 예시
// pd.merge(df_left, df_right, how='inner', on=None) -> default
pd.merge(df1, df2) # how='inner'
# 공통되지 않은 key값에 대해서 생략
# 공통된 key값이 중복되어 합쳐짐(아래 예시)
# data1 key data2
# 0 a 0
# 1 a 0
# ...
pd.merge(df1, df2, on='key', how='outer')
# 공통되지 않는 값들은 NaN으로 채워짐
pd.merge(df1, df2, on='key', how='left')
# df1을 기준으로 df2에 해당 key값이 없는 경우 NaN
# key 'd'는 df1에 없으므로 df2에서 생략됨
pd.merge(df1, df2, on='key', how='right')
# left랑 반대
[3] join() : 인덱스 기준으로 데이터프레임 병합
// df1.join(df2, how='left') -> default
df1= pd.DataFrame({'A':[1,2,3,4]},index=['a','b','c','d'])
df2 = pd.DataFrame({'B':[5,6,7,8]},index=['b','c','g','f'])
df1.join(df2) # how='left'
# 인덱스는 df1, df2에 없는 df1 인덱스의 값은 NaN
# how='right' 옵션은 바로 위 코드 반대
df2.join(df1)
# 바로 위 코드 참고, B컬럼부터 출력됨
df1.join(df2, how='inner') # 교집합
df1.join(df2, how='outer') # 합집합
// join()하려는 두 데이터프레임이 중복된 열을 가지고 있을 때 오류가 발생할 수 있다.
// lsuffix('')/rsuffix('') 옵션을 주어 기존 열에 접미사를 붙일 수 있다.
// 예를 들어 두 데이터프레임에 'col'이라는 이름의 열이 있을 경우,
// lsuffix('_1'), rsuffix('_2') 옵션을 주면,
// 'col_1', 'col_2'로 열 이름이 변경되어 출력된다.
[4] append() :
df1 = pd.DataFrame({'A':[10,20,30,40]},index=['a','b','c','d'])
df2 = pd.DataFrame({'A':[10,20,30,40]},index=['e','f','g','h'])
df3 = pd.DataFrame({'B':[1,2,3,4]},index=['a','b','c','d'])
//단순 결합, 없는 건 NaN으로 처리되고 결합
# df1과 df2는 인덱스만 다름
df1.append(df2,sort=False)
// df2가 df1 아래로 붙음
# df1과 df3는 인덱스만 같음
df1.append(df3,sort=False)
// df3이 df1 오른쪽으로 붙음, 없는 값은 NaN처리
# df2와 df3는 인덱스와 컬럼이 다름
df2.append(df3,sort=False)
// df3이 df2 오른쪽으로 붙음, 없는 값은 NaN처리
// 인덱스 없애려면 ignore_index=True 옵션 적용