Data_Analysis_Track_33/Python

Python_Pandas_02-2(DataFrame)

lsc99 2023. 9. 13. 17:46

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)