wisdiom 아니고 wisdom

1. 판다스 자료구조(2) 본문

👩‍💻/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)

 

 

반응형

'👩‍💻 > pandas' 카테고리의 다른 글

3. 데이터프레임 응용(3)  (0) 2021.01.31
3. 데이터프레임 응용(2)  (0) 2021.01.31
3. 데이터프레임 응용(1)  (0) 2021.01.31
2. 데이터 사전 처리  (0) 2021.01.27
1. 판다스 자료구조(1) - Series, 시리즈  (0) 2021.01.18
Comments