데이터 결합 - merge, concat

2022. 3. 17. 23:30Python

pandas.merge : key 변수를 기준으로 두 개의 데이터 프레임을 병합(join)하는 함수

left : 통합 대상 데이터 프레임1

right : 통합 대상 데이터 프레임2

on : 통합 기준 key 변수 및 변수 리스트 (미입력시 이름이 같은 변수를 key로 식별)

left_on : 데이터 프레임1의 key 변수 및 변수 리스트

righr_on : 데이터 프레임2의 key 변수 및 변수 리스트

left_index : 데이터 프레임1의 인덱스를 key로 사용할 지 여부 

right_index : 데이터 프레임2의 인덱스를 key로 사용할 지 여부 

 

left_on, right_on을 사용한 데이터 통합

# 컬럼명을 바꿔도 똑같이 작동함
merged_df = pd.merge(df1, df2, left_on = "employee", right_on = "name")
merged_df.head() # employee와 name 모두 살아 있어서, 하나를 제거해줘야 함
merged_df.drop('name', axis = 1, inplace = True) #name 제거
merged_df.head()

index를 사용한 데이터 통합

merged_df = pd.merge(df1, df2, left_on = "employee", right_index = True)
merged_df.head()

pandas.concat 

  • 둘 이상의 데이터 프레임을 이어 붙이는데 사용하는 함수
  • 통합해야 하는 데이터가 많은 경우에는 빈 데이터프레임을 생성한 뒤 concat함수 이용

objs : DataFrame을 요소로 하는 리스트 (입력 예시 : [df1, df2])로 입력 순서대로 병합이 됨

ignore_index : True면 기존 인덱스를 무시하고 새로운 인덱스르 부여(ex. 행 단위 결합), False면 기존 인덱스 사용(ex. 열 단위 결합시)

axis : 0이면 행 단위로 병합을 수행, 1이면 열 단위 병합을 수행

merged_df = pd.concat([pd.read_csv("일별 오염 데이터/" + file, sep = "\t", engine = "python")
                       for file in os.listdir("일별 오염 데이터") if '오염_수준.txt' in file])

os.listdir

os.listdir(path) : path상에 있는 모든 파일명을 리스트 형태로 반환

merged_df = pd.DataFrame() # 빈 데이터 프레임 생성

for file in os.listdir("일별 오염 데이터"):
    if '오염_수준.txt' in file:
        df = pd.read_csv("일별 오염 데이터/" + file, sep = "\t", engine = "python")
        merged_df = pd.concat([merged_df, df], axis = 0, ignore_index = True)

merged_df.head()

xlrd을 이용한 엑셀 시트 목록 가져오기

xlrd는 엑셀 데이터를 다루기 위한 모듈로, 엑셀 내의 반복 잡업을 하기 위해 주로 사용함

wd = xlrd.openworkbook(file, on_demand = True) # 엑셀 파일을 불러와 wb에 저장
wb.sheet_name() #wb에 있는 시트 목록을 리스트 형태로 반환
import xlrd
wb = xlrd.open_workbook("월별매출데이터.xlsx", on_demand = True)
sheetnames = wb.sheet_names()
sheetnames

merged_df = pd.DataFrame()
for sn in sheetnames:
    df = pd.read_excel("월별매출데이터.xlsx", sheet_name = sn, skiprows = range(6))
    df = df.iloc[:, 1:] # 첫 번째 컬럼이 불필요하므로 제거
    merged_df = pd.concat([merged_df, df], axis = 0, ignore_index = True)
merged_df

'Python' 카테고리의 다른 글

데이터 정렬  (0) 2022.03.18
pivot_table, groupby  (0) 2022.03.18
기초 통계 함수  (0) 2022.03.18
Input / Output  (0) 2022.03.17
데이터 불러오기, 저장하기  (0) 2022.03.17