pandas는 테이블 형태의 데이터를 쉽게 다룰 수 있는 파이썬 라이브러리이다.
Anaconda 를 설치 하였다면 판다스를 바로 사용 할 수 있다.
엑셀 파일을 하나 만들어서 사용 해 보자.
# 라이브러리 호출
import pandas as pd
sample = pd.read_excel('./datasalon-master/02_개정판/2_Data_Analysis_Basic/files\\sample_1.xlsx', #파일 위치
header = 1, # 헤더의 위치를 나타냄
skipfooter = 2, # 마지막줄 2줄 생략
usecols = 'A:C') # A컬럼부터 C 컬럼까지 가지고 옴.
sample.head(3)
💨 info() 함수
데이터에 대한 요약 정보를 제공.
sample.info()
💨 describe() 함수
여러가지 통계량을 출력 해 준다.
sample.describe()
💨전체 가져오기
sample
💨 한개의 컬럼 가져오기
sample['입국객수']
💨 여러개 컬럼 가져오기
sample[['국적코드','입국객수']]
💨 컬럼 추가하기
sample['기준년월'] = '2024-07-31'
sample
💨 row 기준 선택
male = (sample['성별'] == '남성')
male
sample[male]
personNum = (sample['입국객수'] >15000)
sample[personNum]
A01, A18 국적 코드가 있는 내역 출력
conditions = (sample['국적코드'].isin(['A01', 'A18']))
sample[conditions]
위의 조건에 해당되지 않는 내역 출력
sample[conditions == False]
위를 사용한 문제를 하나 풀어 보자.
1. 엑셀에서 전년동기 컬럼값을 추가로 가져온다
2. 성별이 여자이고 입국객수와 전년동기 차이가 2만명 이상인 내역만 출력
3. ' 국적코드', '성별', '입국객수', '전년동기', '기준년월' 컬럼이 나와야 한다.
conditions = (sample['성별'] == '여성')
conditions2 = ((sample['입국객수'] - sample['전년동기']) >= 20000)
sample[conditions & conditions2]
💨 데이터 통합
통합 전 국적코드에 대한 국적 명을 가지고 있는 파일을 가져 올 것이다.
code_master = pd.read_excel('./datasalon-master/02_개정판/2_Data_Analysis_Basic/files/sample_codemaster.xlsx')
code_master
merge 합수를 이용해서 컬럼을 추가한다.
왼쪽 테이블은 sample, 오른쪽 테이블은 code_master 을 가져오고
왼쪽 테이블을 기준으로 '국적코드' 를 기준으로 합친다.
sample_code = pd.merge(left = sample, # 왼쪽 테이블
right = code_master, # 오른쪽 테이블
how = 'left', # 기준 테이블
left_on = '국적코드', # 왼쪽 테이블 기준 컬럼
right_on = '국적코드') # 오른쪽 테이블 기준 컬럼
sample_code
inner 을 이용하여 컬럼값이 일치하는 것만 가져올 수도 있다.
sample_code_inner = pd.merge(left = sample, # 왼쪽 테이블
right = code_master, # 오른쪽 테이블
how = 'inner', # 기준 테이블
left_on = '국적코드', # 왼쪽 테이블 기준 컬럼
right_on = '국적코드') # 오른쪽 테이블 기준 컬럼
sample_code_inner
데이터 베이스에서 사용하는 Join 에는 네가지가 있는데 각각 다음과 같다.
1.inner join(=내부조인=등가조인)
두 테이블 조인시 양쪽다 동일한 데이터 존재
해야 한다.
2.outer join(=외부조인)
from x,x
- left outer join
- right outer join
2-1) oracle outer join
select *
from emp e,dept d
where e.deptno = d.deptno(+)
and e.bonus is not null;
2-2) mariadb outer join
select *
from emp e
left outer join dept d
on e.deptno = d.deptno where e.depno in (10,20)
and e.bonus is not null;
3.self join
같은 테이블을 조인
4.cartesian product
emp: 100건,dept:30건
select *
from emp e,dept d
통합을 위해 샘플 코드를 하나 더 들고 오자.
sample2 = pd.read_excel('./datasalon-master/02_개정판/2_Data_Analysis_Basic/files/sample_2.xlsx', #파일 위치
header = 1, # 헤더의 위치를 나타냄
skipfooter = 2, # 마지막줄 2줄 생략
usecols = 'A:D') # A컬럼부터 C 컬럼까지 가지고 옴.
sample2['기준년월'] = '2024-08'
sample_code_2 = pd.merge(left = sample2, # 왼쪽 테이블
right = code_master, # 오른쪽 테이블
how = 'left', # 기준 테이블
left_on = '국적코드', # 왼쪽 테이블 기준 컬럼
right_on = '국적코드') # 오른쪽 테이블 기준 컬럼
sample_code_2
- 아래로 통합
최신 pandas (2 버전이상) 에서는 append 함수가 사라지고 concat 함수로 대체
판다스 버전은 아래와 같이 확인 할 수 있다.
print(pd.__version__)
append 를 사용시 'dataframe' object has no attribute 'append' 라는 에러는 볼 수 있다.
sample = pd.concat([sample_code, sample_code_2], ignore_index = True)
sample
해당 데이터를 엑셀 파일로 저장 해 보자.
sample.to_excel('./방문객수.xlsx')
해당 위치에 저장이 잘 된 것을 확인 할 수 있다.
index 번호를 제외하고 싶다면 다음과 같이 하면된다.
sample.to_excel('./방문객수.xlsx', index = False)
💨 pivot 테이블 생성
피벗 테이블은 기존 데이터의 컬럼을 재구성하여 데이터 통계를 한눈에 파악 할 수 있게 해준다.
sample_pivot = sample.pivot_table(values = '입국객수', # 내부에 들어갈 엑셀 값
index = '국적명', # row(행)에 배치 할 값
columns = '기준년월', # column(열)에 배치 할 값
aggfunc = 'mean') # 입국객수를 index, column 기준으로 평균을 계산
sample_pivot
aggfunc 옵션은 다음과 같다.
함수명 | 설명 |
mean | 평균 |
sum | 합계 |
min | 최솟값 |
dedian | 중앙값 |
max | 최댓값 |
count | 개수 |
nunique | 중복을 제거한 후 원소 개수 |
최대 입국객수를 구해보자.
sample_pivot_2 = sample.pivot_table(values = '입국객수',
index = '국적명',
aggfunc = 'max')
sample_pivot_2
'Python' 카테고리의 다른 글
[Python] 실제 사이트 크롤링을 해보자. (0) | 2024.07.31 |
---|---|
[Python] 크롤링 with selenium (id, class, 태그 명으로 찾기) (0) | 2024.07.31 |
[Python] 파이썬 기본 입력과 출력, print 함수, 인덱스 계산, for 문 등. (0) | 2024.07.30 |
[Python] 주피터 노트북 사용법 (0) | 2024.07.30 |
[Python] 아나콘다 (Anaconda) 설치, 주피터 노트북 기본 경로 설정 (0) | 2024.07.30 |