저번 시간에 넘파이를 배우고 표를 가지고 와보니 어떠신가요?
뭔가 이상하게 가져와지고 정렬도 이상하지 않으신가요?
이럴때 가장 도움이 되는 모듈이 이 Pandas입니다.
Pandas
- python의 데이터 분석 및 조작을 위한 라이브러리
- 테이블 형식의 데이터를 다루는 데 최적화
- Series : 1차원 데이터 구조로, 배열과 비슷하며 인덱스가 포함됨
- DataFrame : 2차원 데이터 구조로, 행과 열로 구성된 테이블 형식
특징
- 데이터 처리 및 변환
- 데이터 필터링, 선택, 정렬
- 결측값 처리 (NaN 데이터 채우기, 제거 등)
- 유연한 데이터 입출력
- CSV, Excel, SQL, JSON, HTML 등 다양한 파일 포맷 지원
- 데이터를 읽고 저장하는 함수 제공
- 강력한 연산 및 분석 가능
- 통계 계산 (평균, 분산 , 중간값 등)
- 그룹화(groupby) 및 집계
그래서 데이터를 편하게 가져 온다는 것은 알겠지만, 그래서 Series 형식이 무엇이냐?
Series
- Series는 데이터가 순차적으로 나열된 1차원 배열의 형태
- 기본적으로 숫자형 인덱스(0, 1, 2, .....)가 제공되지만, 커스텀 인덱스를 설정할 수도 있는 형태
커스텀 하는 방법은 다음 예와 같이 설정하시면 됩니다.
여기까지 어렵지 않죠 ㅎㅎ
그럼 만약에 딕셔너리로 생성 하려면 어떻게 해야 할까요?
실습 (pandas 를 이용하여 딕셔너리 목록 출력)
- a,b,c,d가 key 값이다.
- 10,20,30,40 값이 value 값이다.
Series의 속성에는 다음과 같이 있습니다.
- index = 인덱스 값을 출력
- values = value 값을 출력
- shape = 요소 개수를 출력
그럼 이제 배열을 출력하는 법을 학습하였으니, 값에 접근하는 법을 공부해봅시다.
어 오류값을 그냥 왜 올리지? 하시는 분들이 계실 겁니다. 저 오류는 오류라기 보다는 경고 입니다. pandas 에서는 인덱스 순서의 값으로 접근하는 것보다는 정확한 인덱스 값으로 접근하는 것을 추천한다는 의미입니다.
일단 값에 접근하는 방식을 봐서 아시겠지만, 넘파이와 같거나 더 편한 기능이 있는 정도이기에 어렵지 않게 익힐수 있을 겁니다.
여기서 만약에 series의 값이 많아진다면, 그 값을 합하는 것만으로 우리가 원하는 n행 n열의 값을 구할 수 있을까요?
아니요 단순히 합하는 것으로는 구할 수 없습니다.
그래서 이때 알아야 할것이 DataFrame이라는 메서드는 입니다.
DataFrame
- DataFrame은 Series들을 결합해 놓은 형태
- 즉, 같은 길이(원소의 개수가 동일한)의 1차원 배열 여러 개가 필요함
그럼 이 데이타프레임을 어떻게 선언하느냐?
간단하죠?
- DataFrame은 행과 열로 이루어진 2차원 배열
- 인덱스 와 컬럼을 기준으로 표 형태처럼 데이터를 저장(db 테이블과 유사)
다른 부분은 그냥 series에 쓰는 메서드 그대로 적용 가능합니다.
추가적으로 데이터 확인하는 메서드가 다양하게 있습니다.
이 외에도 필터링 기법이 있습니다.
DataFrame 필터링
- loc : 라벨(Label) 기반 접근
- 행/열 이름(label)을 사용하여 데이터를 선택
- 문자형 인덱스난 라벨을 사용하는 경우
- 슬라이싱 사용 시 끝 값이 포함
- df.loc[row_labels, column_labels]
- iloc : 정수(Integer) 기반 접근
- 정수 위치(index)를 사용하여 데이터를 선택
- 순서 기반 접근에 적합
- 슬라이싱 사용 시 끝 값이 포함되지 않음 (Python 기본 슬라이싱과 동일)
- df.iloc[row_indices, column_indices]
그리고 또 두가지의 추가적인 메서드가 있습니다.
- sort_values : 정렬
- drop : 칼럼 삭제
자 이제 기본적인 것을 다 학습하였으니 실습을 해봅시다.
실습(데이터프레임 만들기)
- 아래 데이터 표를 이용하세요.
- 결과를 다음과 같이 출력하세요.
지금 까지 저희는 완전한 형태의 데이터만 가지고 출력을 해왔습니다.
하지만, 앞으로 저희가 가져올 데이터는 크롤링으로 가져올 것이가에 결측(입력 값이 없는 데이터)값이 있을경우 오류가 뜨거나 데이터가 잘못 채워지는 오차가 일어나게 됩니다. 그래서 이런 결측값을 제외하는 메서드를 사용하여야 합니다.
결측값
- 데이터 셋에서 값이 존재하지 않거나 누락된 경우를 의미
- NaN, None으로 표시
- isnull() : 각 값의 결측 여부
- dropna() : 결측값 제거
- fillna() : 결측값 채우기
추가 메서드
- isin() : Series나 DataFrame에서 특정 값이 존재하는지 여부를 참/거짓으로 반환하는 메서드(필터링)
- isin()은 기본적으로 결측값을 무시
- value_counts() : 데이터의 고유값과 해당 값의 빈도수를 계산
- normalize = True 빈도를 비율(%)로 계산
- sort = False 결과를 정렬하지 않음
- ascending = True 빈도수를 오름차순으로 정렬
- dropna = False 결측값(NaN)도 빈도로 계산
- agg() : 원하는 통계지표 요약
- mean() : 평균
- std() : 표준편차
- var() : 분산
- describe() : 통계지표 요약
- Series 간의 산술 연산은 인덱스를 기준으로 수행되며 인덱스가 맞지 않으면 결측값이 반환
- DataFrame은 행과 열 단위로 연산을 수행합니다. 기본적으로 동일한 열 이름(컬럼)과 인덱스를 기준으로 연산
- groupby(by=컬럼명).(연산)()
- sum() : 각 그룹의 합계를 계산
- mean() : 각 그룹의 평균을 계산
- count() : 각 그룹의 데이터 개수를 계산
- agg() : 각 그룹에 대해 여러 함수를 동시에 적용
- size() : 각 그룹의 크기를 반환
- first() : 각 그룹에서 첫 번째 값을 반환
- last() : 각 그룹에서 마지막 값을 반환
마지막으로, 우리가 가져올 파일이나 형식에 따라 읽고 쓰는 코드들이 존재합니다.
실습(난이도 조금 있습니다.)
공공 데이터 포럼에서 서울시 공원 내 운동기구 설치 현황 파일을 다운로드 받으세요.(CSV 파일)
- 공원별 총 운동기수 설치 수
- 운동기구 종류별 설치 개수
- 관리기관별 총 운동기구 설치 수
- 특정 공원 데이터 필터링(예: 남산공원(회현))
- 특정 운동기구 종류 데이터 필터링(예: 스텝사이클)
- 운동기구 수량 기준 내림차순 정렬
- (선택) 각각 파일 저장
해답 예시는 늘 그렇듯 하루 코드에 올려 놓겠습니다.~~~~~~
오늘도 같이 공부하시느라 수고 많으셨습니다!!!!!!

'python 시작하기' 카테고리의 다른 글
Python 데이터 시각화 (2) (1) | 2024.12.17 |
---|---|
Python 데이터 시각화 (1) | 2024.12.16 |
Python Numpy (4) | 2024.12.14 |
Python 웹 자동화 (1) | 2024.12.12 |
Python 예외 처리 (0) | 2024.12.11 |