파이썬

판다스(Pandas)

디다새 2021. 5. 11. 14:11

판다스

  • 파이썬으로 데이터를 분석하는데 사용하는 필수 패키지 중 하나
  • 패키지 설치 : pip install pandas
  • 패키지 임포트 : import pandas as pd

시리즈(Series) 클래스 vs. 데이터프레임(DataFrame) 클래스

 

시리즈(Series)

  • 시리즈 = 데이터 + 데이터를 가리키는 인덱스

시리즈 생성

  • 데이터: 리스트나 1차원 배열 형식
  • 인덱스: 데이터의 길이와 같게 지정. 인덱스의 값을 인덱스 라벨(label)이라고도 하며, 인덱스 라벨은 문자열 뿐 아니라 날짜, 시간, 정수 등도 가능

인덱스 지정 방식(좌)과 인덱스 미지정 방식(우)으로 시리즈 생성

시리즈의 인덱스와 데이터

시리즈의 인덱스와 데이터를 불러오는 방법

시리즈 인덱싱

인덱싱의 다양한 방법

  • 배열처럼 인덱스 번호를 이용하는 방법과 인덱스 라벨을 이용하여 하나의 값을 불러올 수 있음 (위 그림의 왼쪽)
  • 여러 개의 값을 불러오는데 배열과 같은 방식 또는 인덱스 라벨을 이용하는 방식을 사용할 수 있음 (그림의 가운데)
  • 조건식을 이용하여 인덱싱할 수도 있음 (그림의 오른쪽)

시리즈 슬라이싱

  • 숫자  vs. 라벨(인덱스 값) 슬라이싱

시리즈 데이터 접근

  • 인덱스 라벨이 속성인 것처럼 .(dot)를 사용해서 값에 접근

시리즈와 딕셔너리(dictionary) 자료형

  • 시리즈 객체는 라벨 값에 의해 인덱싱이 가능하므로 실질적으로 인덱스 라벨 값을 키(key)로 가지는 딕셔너리 자료형과 같다고 볼 수 있다.
  • 따라서 딕셔너리 자료형에서 제공하는 in 연산도 가능하고 items 메서드를 사용하면 for 루프를 통해 각 원소의 키(key)와 값(value)을 접근할 수도 있다.

in 연산자 사용과 item 메서드 이용

  • 딕셔너리를 이용한 시리즈 생성

딕셔너리를 이용한 시리즈 생성
인덱스를 사용한 경우 인덱스에 따라 정렬되고, 인덱스를 사용하지 않는 경우 딕셔너리 순서로 정렬된다.

시리즈의 인덱스 기반 연산

시리즈의 사이즈가 다르면 연산시 오류가 발생한다.

  • NaN이 아닌 값만 얻기 위한 notnull 메소드

notnull()의 반환형은 bool 타입이다.

데이터 수정, 추가, 삭제

데이터 추가, 삭제의 예

  • 추가할 때는 딕셔너리의 데이터 추가방식과 동일하며, 삭제할 때는 'del'을 써서 시리즈의 값을 삭제한다.

데이터프레임(DataFrame)

  • 공통 인덱스를 가지는 열 시리즈(column series)를 딕셔너리로 묶어놓은 것
  • 2차원이므로 각각의 행 데이터의 이름이 되는 행 인덱스(row index) 뿐 아니라 각각의 열 데이터의 이름이 되는 열 인덱스(column index)도 붙일 수 있다.

데이터프레임 생성

  1. 하나의 열이 되는 데이터를 리스트나 일차원 배열로 준비한다.
  2. 이 각각의 열에 대한 이름(라벨)을 키로 가지는 딕셔너리를 만든다.
  3. 이 데이터를 DataFrame 클래스 생성자에 넣는다. 이 때, 열방향 인덱스는 columns 인수로, 행방향 인덱스는 index 인수로 지정한다.

딕셔너리의 value를 리스트로 한 데이터를 데이터 프레임으로 생성한 예

데이터, 행 인덱스, 열 인덱스

데이터프레임에서 .value, .index, .columns를 사용한 예

 데이터 수정, 추가, 삭제

데이터프레임의 인덱싱

  • 인덱스로 라벨 값을 하나만 넣으면 시리즈 객체가 반환되고 라벨의 배열 또는 리스트를 넣으면 부분적인 데이터프레임이 반환된다.

데이터프레임의 인덱싱

  • 슬라이싱을 해야함

데이터프레임의 행인덱싱을 위해서는 슬라이싱을 해야한다.

loc 인덱서

  • 용법 : df.loc[행 인덱싱 값(라벨)]  또는 df.loc[행 인덱싱 값(라벨), 열 인덱싱 값(라벨)]
  • 인덱싱 값을 하나만 사용하는 경우, 데이터프레임의 “행”을 선택한다.
  • 인덱싱 값을 행과 열을 모두 사용하는 경우

loc인덱서를 사용한 예

iloc 인덱서

  • 사용법은 loc 인덱서 동일하나, 라벨이 아닌 순서를 나타내는 정수(integer) 인덱스 사용

iloc 인덱서는 numpy와 같은 방법으로 인덱싱을 한다.

데이터 입출력 파일 준비

  • %%writefile 명령 : 셀에 서술한 내용대로 텍스트 파일을 만드는 명령이다.

%%writefile 매직 명령어를 이용한 csv 파일 생성

CSV파일 입력

  • pandas.read_csv()

판다스 read_csv 함수 사용 예

  • 위에서 읽은 데이터에는 열 인덱스는 있지만 행 인덱스 정보가 없으므로 0 부터 시작하는 정수 인덱스가 자동으로 추가되었다.
  • 열 인덱스 정보가 없는 경우, name 인수로 설정

name인수로 열 인덱스를 지정한 예. 행 인덱스는 0 부터 시작하는 정수 인덱스가 자동으로 추가되었고 , 열 인덱스는 name 인수에서 지정한 대로 추가되었음

  • 특정한 열을 행 인덱스로 지정하고 싶으면 index_col 인수를 사용

CSV파일 출력

  • DataFrame.to_csv() : 데이터프레임을 csv 파일로 저장
    to_csv() 메서드를 이용하여 csv를 저장한 예
  • 저장한 파일 확인

read_csv() 메서드를 이용하여 csv 파일 내용 불러오기

  • 행 인덱스, 열 인덱스 없이 저장하려면 각각 index, header 인수를 False로 지정

인터넷 상의 CSV 파일 입력

  • head(), tail() 메소드

데이터프레임의 첫5개 행의 정보와 마지막 5개 행의 정보를 보여준다.

  • head(), tail() 메소드의 개수 지정

head() 메소드를 이용하여 상위 10개의 데이터를 확인