02.1 판다스 시작하기
판다스: 데이터 분석을 위한 파이썬 라이브러리, 주로 행과 열로 이루어진 2차원 데이터를 다루는 데 사용
넘파이는 다차원 배열을 다루기에 적합
판다스는 표 형태의 데이터를 다루기에 적합
import pandas as pd
series_data = pd.Series([True, 3.14, 'ABC'])
데이터프레임: 열과 인덱스로 이루어져 있는 2차원 배열 형태의 데이터 타입
netflix = pd.read_csv('./netflix_selena.csv')
netflix.to_csv('netflix_new.csv', index=False)
index=False: 행 이름을 파일에 저장하지 않도록 설정
판다스에서 object 데이터 타입
- 문자열 데이터: 다른 언어에서는 문자열 데이터를 string으로 처리, 판다스는 object
- 혼합형 데이터: 한 열에 다양한 데이터 타입을 혼합하면 object로 간주, object는 여러 데이터 타입을 포함할 수 있는 파이썬의 기본 객체형 데이터
02.2 데이터 내용 확인하기
list(netflix.columns)
list(netflix.index)
columns는 데이터프레임의 모든 열의 이름을 반환
index는 데이터프레임의 모든 행의 인덱스 이름을 반환
netflix.head()
netflix.tail()
head(n)함수는 첫 행부터 n개까지의 행을 보여준다. n을 지정하지 않으면 5개의 행
tail()함수는 끝에서 n개의 데이터를 보여준다.
앞 뒤 내용을 빠르게 확인해 어떤 데이터가 들어있는지 파악할 수 있다.
시간순으로 정렬된 데이터의 경우 마지막 데이터가 어떤 상태인지 파악하는 데 유용
데이터프레임의 하위 부분에 이상치나 특이값이 존재하는지 확인할 수 있다.
netflix.shape
netflix.info()
shape속성은 파이썬의 튜플로 데이터프레임의 형태를 반환
info() 함수는 열에 대한 요약 정보(열의 이름, 누락되지 않은 값의 개수, 데이터 타입 등)를 반환
단순히 데이터만 확인해보는 것이 아니라 데이터 분석 프로젝트를 시작하는 단계에서 데이터를 정확히 이해하기 위해 사용
02.3 특정 열 선택하기
netflix['열 이름']
netflix.열이름
점 다음에 열 이름을 입력하는 경우, 열 이름에 공백과 특수문자가 없는 경우에만 사용 가능
netflix[['열 이름1', '열 이름2']]
여러 열을 선택하여 반환하면 데이터프레임을 추출할 수 있다.
시리즈는 대괄호 1개만, 데이터프레임은 대괄호 2개를 사용한다.
이중 대괄호를 사용한 열 추출은 데이터 정제와 요약 통계에 매우 유용
불필요한 데이터를 제거, 메모리 사용량을 줄이고 처리 속도를 향상시킬 수 있다.
02.4 데이터 필터링하기
비교연산자: >, <, =
부정연산자: ~
논리연산자: &, |
title_year = netflix.loc['title', 'release_year']]
type_director = netflix.iloc[[3, 4], [1, 3]]
netflix['type'].isin(['TV Show'])
loc[]: 데이터프레임의 특정 행의 인덱스나 열 이름을 이용하여 데이터에 접근하는 방식
iloc[]: 정수값으로 필터링할 때 사용
isin()함수: 시리즈 또는 데이터프레임에서 특정 값이 포함되어 있는지 확인할 때 사용
단순한 다중 값 조건일 때는 isin() 함수가 더 가독성이 좋고 간결
복잡한 논리 조건일 때는 조건문이 더 유연하고 강력
02.5 결측치 처리하기
결측치: 데이터가 없거나 부적절한 경우, Nan, None
결측치가 중요한 이유
분석결과가 왜곡 될 수 있다.
결측치가 있는 데이터는 예측 모델의 성능을 저하시킨다.
데이터의 완전성이 저하될 수 있다.
신뢰성이 저하된다.
결측치를 처리하는 방법
- 결측치가 있는 행 또는 열 제거
- 결측치를 다른 값으로 대체
- 결측치 표시 변수 추가
netflix.isna().sum()
isna() 함수는 데이터프레임의 각 요소가 결측치인지 확인하여 True 또는 False로 표시한 데이터프레임을 반환
sum() 함수는 이 데이터프레임에서 True의 개수를 합산하여 반환
netflix['country'] = netflix['country'].fillna('No Data')
netflix['director'] = netflix['director'].replace(np.nan, 'No Data')
netflix.dropna(axis=1, inplace=True)
netflix.dropna(subset=['listed_in'], inplace=True)
fillna()로 결측치를 'No Data'라는 문자열로 대체
replace(np.nan, 'No Data')는 director 열에서 np.nan값을 'No Data'로 대체
dropna()함수는 데이터프레임에서 결측치를 포함한 행 또는 열을 제거 axis=0: 행을 제거, axis=1: 열을 제거
inplace=True는 원본 데이터프레임을 수정하겠다는 옵션
subset 매개변수로 열 이름이 listed_in인 곳에서 결측치가 있는 행을 제거
02.6 데이터 통계 처리하기
평균값: mean() 함수
중앙값: median() 함수
중앙값이 평균값보다 이상치의 영향을 덜 받음
합계: sum() 함수
최댓값, 최솟값: max(), min() 함수
표준편차: std() 함수
분산: var() 함수
비어있지 않은 값 세기: count() 함수
열의 빈도수: value_counts() 함수
통계 지표 요약하기: describe() 함수(count, mean, std, min, 25%, 50%, 75%, max)
원하는 통계 지표만 요약하기: agg() 함수
복잡한 데이터셋을 다루는 상황에서 빠르게 통계 연산을 수행할 수 있다. 현업에서 데이터를 빠르게 다각도록 분석하여 주요 비즈니스 결정을 내리거나 실시간 보고서를 생성해야 할 경우 자주 이용
netflix.agg({'release_year' : ['min', 'max', 'median', 'std'],
'duration' : ['min', 'max', 'mean', 'median']})
그룹별 집계: groupby() 함수
netflix.groupby('type')['duration'].mean()
type열을 기준으로 그룹화하여 duration의 평균을 구한다.
02.7 데이터프레임에 행이나열 추가하거나 삭제하기
new = netflix.iloc[0, :]
netflix.loc[8] = new
netflix['2duration'] = netflix['duration'] * 2
netflix = netflix.drop(np.arange(2, 5), axis=0)
netflix = netflix.drop('2duration', axis=1)
iloc[], loc[]를 사용하여 행 추가
열 이름을 지정하고 해당 열에 값을 할당하여 새로운 열 추가
np.arange(2, 5)는 삭제할 행의 인덱스 범위 지정( 2이상 5미만), axis=0은 행 기준으로 삭제 수행
drop()함수로 데이터프레임의 행을 삭제
axis=1은 열 기준으로 삭제 수행
'데이터 분석 > 파이썬 데이터 분석가 되기+챗GPT' 카테고리의 다른 글
3장 연습문제 (0) | 2025.01.25 |
---|---|
03장 데이터 시각화 라이브러리, 맷플롯립 (0) | 2025.01.25 |
2장 연습문제 (0) | 2025.01.20 |
1장 연습문제 (0) | 2025.01.13 |
01장 수치 계산 라이브러리, 넘파이 (0) | 2025.01.13 |