# 코드잇 데이터 사이언티스트 강의 듣는 중
<같은 형식의 데이터 합치기>
- pd.concat()
- 같은 변수를 합칠 때
import pandas as pd
english_df1 = pd.DataFrame({
'name': ['dongwook', 'taeho', 'jimin'],
'english_score': [50, 89, 68]
})
english_df2 = pd.DataFrame({
'name': ['yoonseo', 'sowon', 'haeun'],
'english_score': [88, 91, 72]
})
--> english_df1
--> english_df2
--> 2개의 형식이 같기에 그냥 합치는 게 나음
pd.concat([english_df1, english_df2])
--> 디폴트가 행으로 그냥 추가되어서(위아래), 파라미터를 추가해야 함.
english_df = pd.concat([english_df1, english_df2], ignore_index= True)
--> ignore_index = True로 인덱스 번호를 다시 부여하게 함.
- 다른 변수를 합칠 때
math_df = pd.DataFrame({
'name': ['dongwook', 'taeho', 'jimin', 'yoonsoo', 'sowon', 'haeun'],
'math_score': [86, 31, 91, 75, 68, 80]
})
math_df
--> 명단이 위 데이터와 같음
pd.concat([english_df, math_df])
--> 디폴트가 행으로 그냥 추가되어서(위아래), 파라미터를 추가해야 함.
--> 해당 값이 없으면 nan으로 나타남.
pd.concat([english_df, math_df], axis=1)
--> axis = 1을 추가해서 기준을 벡터로 바꿔주면, 위아래가 아니라, 옆에 더해짐.
<조인 Join 연산>
- 공통으로 들어 있는 값(키, key)을 기준으로 데이터를 합치는 것.
- 4개의 종류
- inner join(공통된 값만 합침), left outer join(왼쪽 데이터 기준으로 합침, 다른 쪽은 결측치), right outer join(오른쪽 데이터 기준으로 합침, 다른 쪽은 결측치), full outer join(데이터 값 모두 합침, 정보가 없으면 결측치)
- 실무에서는 inner join과 left outerjoin을 많이 사용.
- merge()와 join()에서 사용함.
+ 조인 종류 이전에 정리해 둠.
<칼럼 기준 데이터 합치기>
- pd.merge()
- 파라미터로 (왼쪽 값, 오른쪽 값, on='키 값', how='조인 방식')
- 데이터 간 공통된 변수명이 있을 때
employee_df
--> 100명
survey_df
--> 76명만 서베이에 대답했음.
--> 두 데이터가 겹치는 값은 id와 department인데 소속은 개인당 겹칠 수 있기 때문에 고유값을 갖는 id를 키 값으로 사용함.
pd.merge(employee_df, survey_df, on='id')
--> then, 76명임
--> merge는 기본 값이 inner join 임.
그래서 모두 들어있는 설문조사 값만 나타남.
--> 사실상 how='inner'임
pd.merge(employee_df, survey_df, on='id', how='left')
--> 100명으로 왼쪽의 직원수를 기준으로 합쳐짐
--> left outer join
--> how='left'
pd.merge(employee_df, survey_df, on='id', how='right')
--> 76명으로 오른쪽 서베이를 한 직원 수 기준으로 합쳐짐
--> right outer join
--> how='right'
pd.merge(employee_df, survey_df, on='id', how='outer')
--> 총 인원이라 100명
--> full outer join
--> how='outer'
- 중복된 벡터 접미사 수정 suffixes=()
- department도 두 데이터의 공통된 값이었기 때문에 합쳐질 때, 중복되지 않게 각각 _x와 _y가 붙었음.
pd.merge(employee_df, survey_df, on='id', how='outer', suffixes=('_left', '_right'))
--> suffixes=('_왼쪽 변경 접미사', '_오른쪽 변경 접미사')
- 그냥 접미사를 없앨 수도 있음
pd.merge(employee_df, survey_df, on='id', how='outer', suffixes=('', '_x'))
--> 비워두면 됨.
--> 핵심은 2개가 같지만 않으면 됨.
- 공통된 변수명이 없을 때
- 각각의 이름을 넣어주면 됨. 단, 값이 같아야 함.
pd.merge(employee_df, survey_df, left_on='id', right_on='employee_id')
#새로운 데이터 프레임을 만들면 활용하기 편함
company_df = pd.merge(employee_df, survey_df, left_on='id', right_on='employee_id')
--> left_in='', right_on='' 위치에 맞게 넣어주면 됨.
++ merge에서도 인덱스 기준으로 합칠 수 있음.
import pandas as pd
employee_df = pd.read_csv('data/employee.csv', index_col='id')
survey_df = pd.read_csv('data/survey.csv', index_col='id')
#둘의 인덱스가 모두 id일 때 이것을 키값으로 사용함
pd.merge(employee_df, survey_df, left_index=True, right_index=True)
- 한 쪽 값만 키 값으로 사용가능함.
- 대신, True가 아닌 값은 특정 칼럼을 키 값으로 지정해야 함.
#예시
pd.merge(employee_df, survey_df, left_index=True, right_on='role')
<인덱스 기준 데이터 합치기>
- .join()
- join은 기본적으로 인덱스를 키값으로 사용하기 때문에 .set_index()로 지정을 미리 해줘야 함.
#우선 변수 명 변경
survey_df = survey_df.rename(columns ={'id':'employee_id'})
# 인덱스 값을 키값으로 지정해줌
employee_df = employee_df.set_index('id')
survey_df = survey_df.set_index('employee_id')
- 조인은 suffix를 merge랑 달리 자동으로 부여하지 않기 때문에 넣어줘야 함.
- 왼쪽 df.join(오른쪽 df, lsuffix='', rsuffix='')
employee_df.join(survey_df, lsuffix='_x', rsuffix='_y')
--> 인덱스 값이 키 값이고 겹치는 department에 접미사가 부여됨
- 왼쪽의 접미사를 없애고 싶으면, 그냥 오른쪽만 넣어주면 됨.
employee_df.join(survey_df, rsuffix='_x')
--> join은 기본적으로 left outer join
--> 따라서 설문조사가 있는 경우만 보려면 inner join으로 바꿔야 함.
--> merge랑 똑같이 how='' 파라미터 사용함.
company_df = employee_df.join(survey_df, rsuffix='_x', how='inner')
--> 이렇게 해주면 설문조사에 참여한 경우만 나타남.
++ join에서도 칼럼을 키값으로 합칠 수 있음.
import pandas as pd
#사원 번호를 다시 컬럼으로 바꿔줌
employee_df = employee_df.reset_index()
#왼쪽 데이터만 인덱스나 컬럼(on) 자유롭게 선택 가능, 서픽스 잊으면 안돼
employee_df.join(survey_df, on='id', rsuffix='_x')
- 무조건 왼쪽 데이터만 인덱스나 칼럼(on='')을 선택해서 키값으로 지정이 가능함.
- 오른쪽 데이터는 인덱스만 키값으로 사용 가능
- 에러 나지 않게 suffix는 꼭 설정해 줄 것.
merge() | join() |
- pd.merge() - inner join이 디폴트 - 칼럼 기준 데이터 합치기 - 공통된 변수명 확인 시 접미사가 자동적으로 추가 됨 - 다양한 옵션 사용가능 |
- 데이터프레임.join() - left outer join이 디폴트 - 인덱스 기준 데이터 합치기 - 공통된 변수명 확인 시 접미사를 반드시 추가해야 함 (안하면 에러) - 인덱스가 키 값으로 설정 시 더 간결한 코드로 합칠 수 있음. |
- join 연산에서 사용 - 사실 둘 다 인덱스나 칼럼의 키 값을 기준으로 연산이 가능하지만, 더 간결하게 쓸 수 있는 상황이 있음. |
'Data Science > Pandas' 카테고리의 다른 글
[데이터 전처리] 원하는 시간 간격으로 묶기 .resample() (0) | 2024.06.26 |
---|---|
[데이터 전처리] 그룹 별로 분석하기 groupby(), category 타입, 멀티 인덱싱 (2) | 2024.06.26 |
[데이터 전처리] 날짜와 시간 데이터 인덱싱하기/ 더하기 빼기, 불린 인덱싱 (0) | 2024.06.24 |
[데이터 전처리] 날짜와 시간 데이터 타입 설정하기, datetime (0) | 2024.06.24 |
[데이터 전처리] 데이터 구간화 cut() or apply(), 람다함수와 apply() (0) | 2024.06.21 |