👩💻/pandas
1. 판다스 자료구조(2)
글로랴
2021. 1. 18. 22:16
DataFrame, 데이터프레임
데이터프레임은 행과 열로 만들어진 2차원 배열이다. 여러 개의 시리즈들이 데이터프레임의 열로 모인 구조이다.
▶ DataFrame 만들기
import pandas as pd
# pd.DataFrame(2차원 배열, index=행 인덱스 배열, columns=열 이름 배열)
df = pd.DataFrame( [[12, '남', '요크셔테리어'], [5, '여', '포메라이언']], index=['미남', '초롱'], columns=['나이','성별','이름'])
▶ 기존 행 인덱스 / 열 이름 변경
-
행 인덱스 변경
- DataFrame객체.index = 새로운 행 인덱스 배열
- DataFrame객체.rename(index={기존 인덱스 : 새 인덱스}, inplace=False) *inplace=True는 원본 객체 변경
-
DataFrame객체.rename({기존 인덱스 : 새 인덱스}, axis=0, inplace=False) *inplace=False는 생략가능
-
열 이름 변경
- DataFrame객체.columns = 새로운 열 이름 배열
- DataFrame객체.rename(columns={기존 이름 : 새 이름}, inplace=False)
- DataFrame객체.rename({기존 이름 : 새 이름}, axis=1, inplace=False)
▶ 행 / 열 삭제
-
행 삭제
- DataFrame객체.drop(행 인덱스 또는 배열, axis=0, inplace=False)
- DataFrame객체.drop(index='인덱스 이름', inplace=False)
-
열 삭제
- DataFrame객체.drop(열 이름 또는 배열, axis=1)
- DataFrame객체.drop(columns='열 이름')
- del DataFrame객체['열 이름']
▶ 행 선택
구분 | loc | iloc |
탐색 대상 | 인덱스 이름(index label) | 정수형 위치 인덱스(integer position) |
범위 지정 | 가능(범위의 끝 포함) | 가능(범위의 끝 제외) |
행 1개 선택 | DataFrame객체.loc['인덱스 이름'] | DataFrame객체.iloc[숫자] |
행 2개 이상 | - DataFrame객체.loc[ [ '인덱스 이름', '인덱스 이름'] ] - DataFrame객체.loc[ '인덱스 이름' : '인덱스 이름' ] |
- DataFrame객체.iloc[ [숫자, 숫자] ] - DataFrame객체.iloc[ 숫자 : 숫자 ] |
▶ 열 선택
열 1개 선택 (시리즈 생성) | 열 2개 이상 선택 (데이터프레임 생성) |
- DataFrame객체['열 이름'] - DataFrame객체.열 이름 |
- DataFrame객체[ [열1, 열2, 열3, ..., 열N] ] |
▶ 원소 선택
- DataFrame객체.loc[행 인덱스, 열 이름]
- DataFrame객체.iloc[행 번호, 열 번호]
▶ 행 추가
- DataFrame객체.loc['새로운 행 이름'] = 데이터 값 또는 배열
# 1) 하나의 데이터 값 입력
df.loc[3] = 0
# 2) 원소 여러 값 배열
df.loc[4] = ['홍지', 90, 98, 100]
# 3) 기존 행 복사
df.loc['미미'] = df.loc[0]
▶ 열 추가
- DataFrame객체['새로운 열 이름'] = 데이터 값
▶ 원소 값 변경
# 1) 원소 1개 변경
df.loc[4, 0] = '미미'
# 2) 원소 여러 개 변경
df[4, 1:] = 100, 78, 80
▶ 행과 열 위치 바꾸기
- DataFrame객체.transpose()
- DataFrame객체.T
▶ 특정 열을 행 인덱스로 설정
- DataFrame객체.set_index(keys, drop=True, append=False, inplace=False)
- keys: 인덱스로 설정할 ['열 이름'] 또는 '열 이름' 또는 2개 이상의 열(멀티인덱스, MultiIndex)
- drop : 인덱스로 설정한 열을 DataFrame에서 삭제여부
- append : 기존 인덱스 삭제여부
- inplace : 원본 객체 변경 여부
df.set_index(['이름'])
df.set_index('이름')
df.set_index(['나이', '소속'])
▶ 행 인덱스 재배열
- DataFrame객체.reindex( 새로운 인덱스 배열 )
new_idx = ['홍지', '지수', '상욱', '현수']
ndf = df.reindex(new_idx)
기존 데이터프레임에 존재하지 않는 행 인덱스가 새롭게 추가되는 경우, 그 행의 데이터 값은 NaN값이 입력된다.
# reindex로 발생한 NaN 값을 숫자 0으로 채우기
ndf = df.reindex(new_idx, fill_value=0)
▶ 행 인덱스 초기화
reset_index()는 행 인덱스를 정수형 위치 인덱스로 초기화 한다.
이때, 기존 행 인덱스는 열로 이동한다.
- DataFrame객체.reset_index(drop=False, inplace=False)
- drop : 인덱스로 설정한 열을 DataFrame내에서 삭제여부
- inplace : 원본 내용 수정여부
▶ 데이터프레임 정렬
- '행 인덱스'를 기준으로 데이터프레임 정렬 : DataFrame객체.sort_index(ascending=True) *ascending=True 생략가능
- '특정 열의 데이터 값'을 기준으로 데이터프레임 정렬 : DataFrame객체.sort_values(by='열 이름', ascending=True)
반응형