DataFrame 개요
- 표(table-행렬) 를 다루는 Pandas의 타입.
- 분석할 데이터를 가지는 판다스의 가장 핵심적인 클래스이다.
- 행(row)와 열(column) 으로 구성되 있다.
- 각 행과 각 열은 식별자를 가지며 Series와 같이 두가지 종류가 있다.
- 순번
- 양수, 음수 index 두가지를 가진다.
- 컬럼도 내부적으로는 순번으고 관리되지만 조회할 때 사용할 수는 없다.
- 이름
- 명시적으로 지정한 행과 열의 이름을 말한다.
- 행의 이름은 index name이라고 하고 열의 이름은 column name이라고 한다.
- index name과 column name은 중복될 수 있다.
- 명시적으로 지정하지 않으면 양수 순번이 index, column 이름으로 설정된다.
- 하나의 행과 하나의 열은 Series로 구성된다.
- DataFrame 객체는 직접 데이터를 넣어 생성하거나 데이터 셋을 파일(csv, 엑셀, DB 등)로 부터 읽어와 생성한다.
dataframe 생성
pd.DataFrame(data[index=None, columns=None])
- data
- DataFrame을 구성할 값을 설정한다.
- Series, list, ndarray를 담은 2차원 배열
- column 이름을 key로 column의 값을 value로 하는 dict
- index
- columns
예시)
import numpy as np
import pandas as pd
dic = {
'id':['id-1', 'id-2', 'id-3', 'id-4', 'id-5'],
'korean':[100, 50, 70, 60, 90],
'english':[90, 80, 100, 60, 40]
}
grade = pd.DataFrame(dic)
grade
id korean english
0 id-1 100 90
1 id-2 50 80
2 id-3 70 100
3 id-4 60 60
4 id-5 90 40
np.random.seed(0)
data = np.random.randint(10, size=(5,3))
data_df = pd.DataFrame(data, columns=['AA', 'BB', 'CC'],
index=['가', '나', '다', '라', '마'])
data_df
AA BB CC
가 5 0 3
나 3 7 9
다 3 5 2
라 4 7 6
마 8 8 1
dataframe의 객체를 파일에 저장
DataFrame객체는 다양한 형식의 파일로 저정할 수 있다.
- csv 파일로 저장
DataFrame객체.to_csv(파일경로,sep=',', index=True, header=True, encoding)
- 텍스트 파일로 저장
- 파일경로: 저장할 파일경로(경로/파일명)
- sep : 데이터 구분자
- index, header: 인덱스/헤더 저장 여부
- encoding: 기본-UTF-8
- 엑셀로 저장
DataFrame객체.to_excel(파일경로, index=True, header=True)
- 기타 형식
DataFrame객체.to_pickle(파일경로, index=True, header=True)
- pickle(pkl)
- 텍스트 상태의 데이터가 아닌 파이썬 객체 자체를 dict,list,typle같은 형태로 필요한 부분을 저장하는 것
- 빠르다는 장점이 있지만 안전에 유의해야 한다.
DataFrame객체.to_html(파일경로, index=True, header=True)
파일로 부터 데이터셋을 읽어와 생성하기
pd.read_csv(파일경로, sep=',', header, index_col, na_values, encoding)
- index_col=정수,컬럼명
- index 명으로 사용할 열이름(문자열)이나 열의 순번(정수)을 지정.
- 생략시 0부터 자동증가하는 값을 붙인다.
- na_values
- 읽어올 데이터셋의 값 중 결측치로 처리할 문자열 지정.
DataFrame의 기본 정보 조회 메소드
- shape
- info()
- head()
- tail()
- isnull().sum()
- .sum()을 붙이면 True(결측치)를 1로 하여 합산한 결과를 보여준다.
- describe() : 숫자형-기술통계값, 범주형-총개수, 고유값들, 최빈값
컬럼이름/행이름 조회 메소드
DataFrame객체.columns
- 컬럼명 조회
- 컬럼명은 차후 조회를 위해 따로 변수에 저장하는 것이 좋다.
- slicing도 가능하다.
DataFrame객체.index
컬럼이름/행이름 변경 메소드
- columns와 index 속성으로는 통째로 바꾸는 것은 가능하나 일부만 선택해서 변경하는 것은 안된다.
- df.columns = ['새이름','새이름', ... , '새이름']
- 가능
- df.columns[1] = '새이름'
- 불가능 (개별적으로 변경은 안된다.)
개별 컬럼이름/행이름 변경 메소드
DataFrame객체.rename(index=행이름변경설정, columns=열이름변경설정, inplace=False)
- 변경한 DataFrame을 반환
- 변경설정: 딕셔너리 사용
- {'기존이름':'새이름', ..}
- inplace: 원본을 변경할지 여부(boolean)
예시)
grade
ID 국어 영어
0 id-1 100 90
1 id-2 50 80
2 id-3 70 100
3 id-4 60 60
4 id-5 90 40
new_columns = {
"국어":"KOREAN",
"영어":"ENGLISH"
}
new_index = {
1:'일',
3:'삼'
}
grade.rename(columns=new_columns, index=new_index, inplace=True)
grade
ID KOREAN ENGLISH
0 id-1 100 90
일 id-2 50 80
2 id-3 70 100
삼 id-4 60 60
4 id-5 90 40
특정 컬럼을 행의 index 명으로 사용 메소드
DataFrame객체.set_index(컬럼이름, inplace=False)
특정 행 또는 열 삭제 메소드
DataFrame객체.drop(columns, index, inplace=False)
- columns : 삭제할 열이름 또는 열이름 리스트
- index : 삭제할 index명 또는 index 리스트
DataFrame객체.drop(labels, axis, inplace=False)
- labels : 삭제할 컬럼명,인덱스 명 또는 리스트
- axis : 열 삭제시 1 , 행 삭제시 0
열 추가 하기
- 새로운 열을 지정 후 값을 대입하면 새로운 열을 추가할 수 있다.
- 열 추가
df['새열명'] = 값
- 마지막 열로 추가된다.
- 하나의 값을 대입하면 모든 행에 그 값이 대입된다.
- 다른 값을 주려면 배열에 담아서 대입한다.
- 열 삽입
df.insert(삽입할 위치 index, 삽입할 열이름, 값)
- 파생변수생성
- 기존 열들의 값을 이용해서 만든 열을 파생변수라고 한다.
- 벡터화 연산을 이용하여 값 대입한다.
- df['새열이름'] = 기존 열들을 이용한 연산
다양한 열선택 기능을 제공하는 메소드들
select_dtypes(include=[데이터타입,..], exclude=[데이터타입,..])
- 전달한 데이터 타입의 열들을 조회.
- include : 조회할 열 데이터 타입
- exclude : 제외하고 조회할 열 데이터 타입
filter (items=[], like='', regex='')
- 매개변수에 전달하는 열의 이름에 따라 조회
- items = [컬럼명들, ..]
- 리스트와 일치하는 열들 조회
- 이름이 일치 하지 않아도 Error 발생안함.
- like = '부분일치문자열'
- 전달한 문자열이 들어간 열들 조회
- 부분일치 개념
- regex = '정규표현식'
query() 를 이용한 boolean indexing
- query(조회조건)
- sql의 where 절의 조건 처럼 문자열의 query statement를 이용해 조건으로 조회
- boolean index에 비해
- 장점: 편의성(문자열로 query statement를 만들므로 동적 구문 생성등 다양한 처리가 가능)과
가독성이 좋다.
- 단점: 속도가 느리다.
- 조회조건 구문
- 외부변수를 이용해 query문의 비교값을 지정할 수 있다.
- query 문자열 안에서 @변수명 사용
- f string이나 format() 함수를 이용해 query를 만들 수도 있다.
query 함수 연산자
- 비교 연산자
- 결측치 비교
- 컬럼.isna(), isnull()
- 컬럼.notna(), notnull()
- 논리 연산자
- in 연산자
- in, ==
- not in, !=
- 비교 대상값은 리스트에 넣는다.
- Index name으로 검색
- 문자열 부분검색(sql의 like)
- 컬럼명.str.contains(문자열): 문자열을 포함하고 있는
- 컬럼명.str.startswith(문자열): 문자열로 시작하는
- 컬럼명.str.endswith(문자열): 문자열로 끝나는
- 문자열 부분검색을 할 컬럼에 결측치(NaN)이 있으면 안된다.