- 빅데이터분석기사
- 데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- 빅데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- SQL
- boostcourse
- 빅분기
- DB
- python
- 코딩테스트
- PY4E
- 프로그래머스
- 코딩테스트 python
- 부스트코스
- r
- Oracle
- AI 플랫폼을 활용한 데이터 분석
- Ai
- Machine Learning
- 오라클
- 데이터베이스
- 정보처리기사
- 이기적
- 네이버부스트캠프
- 파이썬
- [멀티잇]데이터 시각화&분석 취업캠프(Python)
- boostcoures
- 난생처음 R코딩&데이터 분석 저서
- 이것이 취업을 위한 코딩테스트다 with 파이썬
- 인공지능기초다지기
- 기초다지기
- Today
- Total
매일공부
[Python Pandas] Dataframe 다중 인덱스 & 병합, 연결 본문
다중 인덱스(multi-index)
- 행과 열에 다중 인덱스 정의 할 수 있음
- columns(index) 인수에 리스트의 리스트(행렬) 형태 = 다중 열(행) 인덱스
- 열(행) 인덱스들의 이름 지정 = columns(index) 객체의 names 속성에 리스트를 넣어서 지정
import pandas as pd
np.random.seed(0)
df4 = pd.DataFrame(
np.round(np.random.randn(6, 4), 2),
columns=[["A", "A", "B", "B"], ["C", "D", "C", "D"]],
index=[["M", "M", "M", "F", "F", "F"],
["id_" + str(i + 1) for i in range(3)] * 2])
df4.columns.names = ["Cidx1", "Cidx2"]
df4.index.names = ["Ridx1", "Ridx2"]
print(df4)
Dataframe 행 인덱스와 열 인덱스 교환
- unstack
= 행 다중 인덱스 중 하나의 인덱스를 열 인덱스로 전환
= 가로로 데이터를 늘려줌
= 행 인덱스가 시계 방향으로 90도 회전
- stack
= 열 다중 인덱스 중 하나의 인덱스를 행 인덱스로 전환
= 세로로 데이터를 늘려줌
= 열 인덱스가 반시계 방향으로 90도 회전
- 인덱스 지정 시 > 문자열 이름과 순서를 표시하는 숫자 인덱스를 모두 사용 가능
Dataframe 다중 인덱스의 인덱싱
- 다중 인덱스를 가지는 경우 > ()로 둘러싸인 튜플이 되어야 함
- loc 인덱스를 사용하는 경우에도 튜플 사용
= 하나의 열이나 행을 선택할때 loc[(상위인덱스, 하위인덱스) , (상위인덱스, 하위인덱스)]
- 슬라이싱 : 대신, loc[(상위인덱스, slice(None) , (상위인덱스, 하위인덱스)]
- 위치 기반 정수 인덱스 == iloc 인덱스
> 튜플 형태의 다중인덱스를 사용할 수 없음
- 하나의 레벨 값만 = 다중 인덱스 중에서 가장 상위의 값을 지정
Dataframe 다중 인덱스의 인덱스 순서 교환
- Dataframe객체.swaplevel( , , axis=0)
: 정의된 다중 인덱스의 상위 하위 인덱스를 교환
> axis는 0일 때 행 인덱스
- Dataframe객체.sort_index(axis=, level=)
: 다중 인덱스가 있는 데이터프레임으로 정렬
: level 인수는 어떤 인덱스를 기준으로 정렬하는지 설정
Dataframe 데이터 병합(merge), 연결(concatenate)
- merge(leftdf1, rightdf2, how='inner')
- 두 데이터 프레임의 공통 열 혹은 인덱스를 기준으로 두 개의 테이블을 합친다
- 키(key) = 기준이 되는 열, 행의 데이터
- how='outer' > 합집합 (컬럼의 없는 데이터는 NaN처리 된다.)
- how='inner' > 교집합
- how='left' > 왼쪽기준 차집합
- how='right' > 오른쪽기준 차집합
- on옵션 : 컬럼 또는 특정 인덱스를 기준으로 결합
- 키가 되는 기준열의 이름이 두 데이터프레임에서 다르다면 > left_on, right_on 인수를 사용하여 기준열 명시
- 일반 데이터 열이 아닌 인덱스를 기준열로 사용하려면 left_index 또는 right_index 인수를 True 로 설정
- indicator ='컬럼명' (both, left_only, right_only)
: 각 속성의 교집합, 왼쪽차집합, 오른쪽차집합 중에서 속하는 집합 표시 - Dataframe객체.join(Dataframe객체, how='outer')
> merge 명령어 대신 join 메서드를 사용 가능
df1 = pd.DataFrame({'고객번호': [1001, 1002, 1003, 1004, 1005, 1006, 1007],
'이름': ['둘리', '도우너', '또치', '길동', '희동', '마이콜', '영희']
}, columns=['고객번호', '이름'])
print(df1)
df2 = pd.DataFrame({'고객번호': [1001, 1001, 1005, 1006, 1008, 1001],
'금액': [10000, 20000, 15000, 5000, 100000, 30000]
}, columns=['고객번호', '금액'])
print(df2)
df_merge1 = pd.merge(df1, df2, how='outer', indicator='indicator정보') # both, left_only, right_only
df_merge1
- concat([df1, df2], axis=0)
- 기준 열(key column)을 사용하지 않고 단순히 데이터 연결(concatenate)
- axis=0: 행 단위로 이어붙이기 (수직)
- axis=1 : 열 단위로 연결(수평)
- 중복된 데이터 = 삭제되지 않음
- ignore_index = True옵션 > index 번호 초기화
- join 옵션 - 교집합 'inner' , 합집합 'outer'
- DataFrame객체에 Series객체를 이어붙이기(열로 추가)
pd.concat([df1, series객체], axis=1)
pd.concat([series객체1, series객체2], axis=1)
sr1 = pd.Series(['1등급','2등급','3등급','4등급'], name = '등급')
sr2 = pd.Series(['YB', 'SW', 'HJ', 'EJ'], name='이름')
df_concat1 = pd.concat([sr2,sr1], axis=1)
print(df_concat1)
df_concat2 = pd.concat([sr2,sr1], axis=0)
print(df_concat2)
# 동일컬럼명에 _x, _y 접미사와 함께 출력됨
df_merge_left = pd.merge(df2, df3, on="이름")
print(df_merge_left)
# set_index 또는 reset_index 사용할 수 있음
df_concat2 = pd.concat([df2,df3], ignore_index=True)
print(df_concat2)
판다스에 내장된 그래프 도구
- df.plot(kine='그래프종류')
- line
- bar
- barh
- his
- box
- kde - 커널밀도
- area -면적
- pie
- scatter -산점도
- hexbin-고밀도 산점도
* 내용참고&출처 : 태그의 수업을 복습 목적으로 정리한 내용입니다.
'Programming > Python' 카테고리의 다른 글
[python] 문자열인 숫자 판단 (0) | 2023.06.20 |
---|---|
[python] 진법&자료형 변환 Casting 함수 (0) | 2023.06.19 |
[Python] Pandas를 활용한 데이터 수집 (0) | 2022.09.02 |
Python Pandas 차집합&대칭차집합 구하기 (0) | 2022.08.29 |
Python 데이터 분석 라이브러리 - Pandas (0) | 2022.08.27 |