파이썬
판다스(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)을 접근할 수도 있다.
- 딕셔너리를 이용한 시리즈 생성
시리즈의 인덱스 기반 연산
- NaN이 아닌 값만 얻기 위한 notnull 메소드
데이터 수정, 추가, 삭제
- 추가할 때는 딕셔너리의 데이터 추가방식과 동일하며, 삭제할 때는 'del'을 써서 시리즈의 값을 삭제한다.
데이터프레임(DataFrame)
- 공통 인덱스를 가지는 열 시리즈(column series)를 딕셔너리로 묶어놓은 것
- 2차원이므로 각각의 행 데이터의 이름이 되는 행 인덱스(row index) 뿐 아니라 각각의 열 데이터의 이름이 되는 열 인덱스(column index)도 붙일 수 있다.
데이터프레임 생성
- 하나의 열이 되는 데이터를 리스트나 일차원 배열로 준비한다.
- 이 각각의 열에 대한 이름(라벨)을 키로 가지는 딕셔너리를 만든다.
- 이 데이터를 DataFrame 클래스 생성자에 넣는다. 이 때, 열방향 인덱스는 columns 인수로, 행방향 인덱스는 index 인수로 지정한다.
데이터, 행 인덱스, 열 인덱스
열 데이터 수정, 추가, 삭제
데이터프레임의 열인덱싱
- 인덱스로 라벨 값을 하나만 넣으면 시리즈 객체가 반환되고 라벨의 배열 또는 리스트를 넣으면 부분적인 데이터프레임이 반환된다.
데이터프레임의 행인덱싱
- 슬라이싱을 해야함
loc 인덱서
- 용법 : df.loc[행 인덱싱 값(라벨)] 또는 df.loc[행 인덱싱 값(라벨), 열 인덱싱 값(라벨)]
- 인덱싱 값을 하나만 사용하는 경우, 데이터프레임의 “행”을 선택한다.
- 인덱싱 값을 행과 열을 모두 사용하는 경우
iloc 인덱서
- 사용법은 loc 인덱서 동일하나, 라벨이 아닌 순서를 나타내는 정수(integer) 인덱스 사용
데이터 입출력 파일 준비
- %%writefile 명령 : 셀에 서술한 내용대로 텍스트 파일을 만드는 명령이다.
CSV파일 입력
- pandas.read_csv()
- 위에서 읽은 데이터에는 열 인덱스는 있지만 행 인덱스 정보가 없으므로 0 부터 시작하는 정수 인덱스가 자동으로 추가되었다.
- 열 인덱스 정보가 없는 경우, name 인수로 설정
- 특정한 열을 행 인덱스로 지정하고 싶으면 index_col 인수를 사용
CSV파일 출력
- DataFrame.to_csv() : 데이터프레임을 csv 파일로 저장
to_csv() 메서드를 이용하여 csv를 저장한 예 - 저장한 파일 확인
- 행 인덱스, 열 인덱스 없이 저장하려면 각각 index, header 인수를 False로 지정
인터넷 상의 CSV 파일 입력
- head(), tail() 메소드
- head(), tail() 메소드의 개수 지정