Python_Pandas_02-2(DataFrame)
3.1. 데이터 프레임의 기본 정보 조회
- csv 파일 읽기
- shape
- info()
- head()
- tail()
- isnull().sum()
컬럼별 null 체크 (sum() 한번 더 하면 총개수)
- describe() : 숫자형-기술통계값, 범주형-총개수, 고유값들, 최빈값
import pandas as pd
pd.options.display.max_rows = 100 # 최대 출력 행수 (저장한 행이 넘어가면 앞뒤로 5개씩만 출력 - 기본 : 60)
pd.options.display.max_columns = 30 # 최대 출력 컬럼수 (기본 : 20)
pd.options.display.max_colwidth = 100 # 한 cell(컬럼)에서 보여줄 글자 최대수 (기본 : 50)
2차원 데이터프레임 shape
# 파일로부터 읽기
df = pd.read_csv("data/movie.csv")
# shape : 차원별 데이터 개수
df.shape # (행수-값의개수, 컬럼수-속성수)
head(), tail()
# 일부 데이터를 확인 (앞에 n개, 뒤에 n개)
df.head(10) # 앞의 10개 행 (default = 5)
df.tail(10) # 뒤의 10개행 (default = 5)
컬럼별 결측치 개수 확인
# 컬럼별 결측치 개수 확인
df.isnull().sum() # dataframe.집계메소드() -> 컬럼별로 계산 -> 결과는 Series로 반환
총 결측치 개수
df.isnull().sum().sum() # 총 결측치 개수
describe() -> 기술통계량을 조회
# 기술통계량을 조회
df.describe() # 수치형(int, float)컬럼들의 여러 통계량을 묶어서 계산
기술통계량을 조회(include -> 타입을 지정)
df.describe(include='object') # 타입을 지정
기술통계량을 조회(exclude -> 지정한 타입 제외)
# include=[타입, 타입, ...] : 지정한 타입의 컬럼에 대한 통계량을 계산
# exclude=[타입, ...] 지정한 타입 이외의 컬럼들에 대한 통계량 계산
df.describe(include=['int32','int64'])
# df.describe(include='int')
전치
# DataFrame.T - 행과 열을 바꾼다. (전치-transpose)
df.describe().T
astype() -> 컬럼의 타입을 변경
df.info() 실행 후 memory usage 확인 -> 메모리 공간 확보
# 컬럼의 타입을 변경
df['num_voted_users'] = df['num_voted_users'].astype('int32')
4. 컬럼이름/행이름 조회 및 변경
4.1. 컬럼이름/행이름 조회
- DataFrame객체.columns
컬럼명 조회
컬럼명은 차후 조회를 위해 따로 변수에 저장하는 것이 좋다.
- DataFrame객체.index
행명 조회
DataFrame객체 생성
grade = pd.read_csv('saved_data/grade2.csv')
grade
컬럼명들 조회
# 컬럼명들 조회 - index 객체로 반환 -> 리스트구현체 (리스트처럼 쓸 수 있다.)
grade.columns
행명 조회
grade.index # 자동증가 값(양수 index)를 사용한 경우 : range(index)
4.2. 컬럼이름/행이름 변경
- columns와 index 속성으로는 통째로 바꾸는 것은 가능하나 일부만 선택해서 변경하는 것은 안된다.
- df.columns = ['새이름','새이름', ... , '새이름']
grade.columns = ['ID', 'KOREAN', 'ENGLISH'] # 통째로 바꿀 때 사용. (개별 변경은 안된다.)
4.2.1. 컬럼이름/행이름 변경 관련 메소드
- DataFrame객체.rename(index=행이름변경설정, columns=열이름변경설정, inplace=False)
개별 컬럼이름/행이름 변경 하는 메소드
변경한 DataFrame을 반환
변경설정: 딕셔너리 사용 -> {'기존이름':'새이름', ..} inplace: 원본을 변경할지 여부(boolean)
컬럼명 변경
# KOREAN -> 국어
grade.rename(columns={'KOREAN':'국어'}, inplace=True) # inplace=True -> 원본 변경
index name 변경
# index 이름 변경
grade2.rename(index = {'id-1':'abcde', 'id-3':'가나다'})
- DataFrame객체.set_index(컬럼이름, inplace=False)
특정 컬럼을 행의 index 명으로 사용
열이 index명이 되면서 그 컬럼은 Data Set 에서 제거된다.
- DataFrame객체.reset_index(inplace=False)
index를 첫번째 컬럼으로 복원
set_index()
# set_index() -> 특정 컬럼을 행의 index 명으로 사용
result = grade.set_index('ID')
result
reset_index()
result2.reset_index('KOR') # index name을 컬럼으로 변경
index name을 제거
result2.reset_index(drop=True) # index name을 제거
index 이름을 자동증가 값으로 변경
# index 이름을 자동증가 값으로 변경
grade.iloc[[0, 2, 3]].reset_index(drop=True)
5. 행과 열의 값 변경
5.1. 특정 행 또는 열 삭제
- DataFrame객체.drop(columns, index, inplace=False)
columns : 삭제할 열이름 또는 열이름 리스트
index : 삭제할 index명 또는 index 리스트
inplace: 원본을 변경할지 여부(boolean)
# drop() 에서 행/컬럼의 이름 -> 이름으로만 삭제 가능. 순번으로는 삭제 안됨.
index -> 행 삭제
grade.drop(index=[1, 3]) # 행 삭제 -> index = index 이름
columns -> 열 삭제
grade.drop(columns=['ID', 'ENG']) # 열 삭제
grade.drop(labels=['ID', 'KOR'], axis=1) # axis : columns or 1, axis : index or 0
# 0, 1 -> axis(축) 번호 -> 값이 나열된(차원)방향의 순번.
grade.drop(labels=[0, 3, 4], axis = 0)