Python

[Pandas] 데이터 통합하기

주댕이 2024. 1. 8. 11:54

# 세로 방향으로 통합하기

import pandas as pd

pd.concat([DataFrame_data1, DataFrame_data2])

df1 = pd.DataFrame({
    'Class1': [95, 92, 98, 100],
    'Class2': [91, 93, 97, 99]
})

df2 = pd.DataFrame({
    'Class1': [87, 89],
    'Class2': [85, 90]
})

result = pd.concat([df1, df2])
result
# 	Class1	Class2
# 0	  95	  91
# 1	  92	  93
# 2	  98	  97
# 3	  100	  99
# 0	  87	  85
# 1	  89	  90

df3 = pd.DataFrame({
    'Class1': [96, 83]
})

# 생성된 데이터에서 순차적으로 index가 증가하도록 만들기
pd.concat([result, df3], ignore_index=True)
# 	Class1	Class2
# 0	  95	 91.0
# 1	  92	 93.0
# 2	  98	 97.0
# 3	  100	 99.0
# 4	  87	 85.0
# 5	  89	 90.0
# 6	  96	 NaN
# 7	  83	 NaN

 

 

# 가로 방향으로 통합하기

DataFrame_data1.join(DataFrame_data2)

df4 = pd.DataFrame({
    'Class3': [93, 91, 95, 98]
})

df1.join(df4)
# 	Class1	Class2	Class3
# 0	  95	  91	  93
# 1	  92	  93	  91
# 2	  98	  97	  95
# 3	  100	  99	  98

# index label을 지정한 DataFrame의 데이터의 경우
index_label = ['a','b','c','d']
df1a = pd.DataFrame({'Class1': [95, 92, 98, 100],
                    'Class2': [91, 93, 97, 99]}, index= index_label)
df4a = pd.DataFrame({'Class3': [93, 91, 95, 98]}, index=index_label)
df1a.join(df4a)
# 	Class1	Class2	Class3
# a	  95	  91	  93
# b	  92	  93	  91
# c	  98	  97	  95
# d	  100	  99	  98

# index label이 다른 경우
index_label = ['a','b','c','d']
df1a = pd.DataFrame({'Class1': [95, 92, 98, 100],
                    'Class2': [91, 93, 97, 99]})
df4a = pd.DataFrame({'Class3': [93, 91, 95, 98]}, index=index_label)
df1a.join(df4a)
# 	Class1	Class2	Class3
# 0	  95	  91	  NaN
# 1	  92	  93	  NaN
# 2	  98	  97	  NaN
# 3	  100	  99	  NaN
# ==> join() 실행 전 index label 체크하기!
df4a.index == df1a.index  # array([False, False, False, False])

 

 

# 특정 열을 기준으로 통합하기

DataFrame_left_data.merge(DataFrame_right_data)

df_A_B = pd.DataFrame({'판매월': ['1월', '2월', '3월', '4월'],
                       '제품A': [100, 150, 200, 130],
                       '제품B': [90, 110, 140, 170]})

df_C_D = pd.DataFrame({'판매월': ['1월', '2월', '3월', '4월'],
                       '제품C': [112, 141, 203, 134],
                       '제품D': [90, 110, 140, 170]})

df_A_B.merge(df_C_D)
# 	판매월	제품A	제품B	제품C	제품D
# 0	  1월	  100	  90	  112	  90
# 1	  2월	  150	  110	  141	  110
# 2	  3월	  200	  140	  203	  140
# 3	  4월	  130	  170	  134	  170

# df_A_B.join(df_C_D)의 경우 오류 발생
# ValueError: columns overlap but no suffix specified: Index(['판매월'], dtype='object')
# join()의 경우, merge()와 다르게 column이 겹치면 안 됨

 

  • 데이터가 특정 열을 기준으로 일부만 공통된 값을 갖는 경우
df_left = pd.DataFrame({'key':['A','B','C'], 'left': [1, 2, 3]})
df_right = pd.DataFrame({'key':['A','B','D'], 'right': [4, 5, 6]})

df_left.merge(df_right, how = 'left', on = 'key')
# 	key	left	right
# 0	  A	  1	  4.0
# 1	  B	  2	  5.0
# 2	  C	  3	  NaN

df_left.merge(df_right, how = 'right', on = 'key')
# 	key	left	right
# 0	  A	  1.0	  4
# 1	  B	  2.0	  5
# 2	  D	  NaN	  6

df_left.merge(df_right, how = 'outer', on = 'key')  # FULL JOIN
# 	key	left	right
# 0	  A	  1.0	  4.0
# 1	  B	  2.0	  5.0
# 2	  C	  3.0	  NaN
# 3	  D	  NaN	  6.0

df_left.merge(df_right, how = 'inner', on = 'key')  # 교집합
# 	key	left	right
# 0	  A	  1	  4
# 1	  B	  2	  5

 

728x90

'Python' 카테고리의 다른 글

[Python] 튜플(vs 리스트)  (4) 2024.01.09
[Python] 리스트  (0) 2024.01.09
[Python] 문자열  (2) 2024.01.03
[Python] 변수  (4) 2024.01.03
[Python] 논리 연산과 비교 연산  (4) 2024.01.02