1. Pandas 란
🍯 pandas 라이브러리 : 파이썬에서 데이터 분석과 처리를 쉽게 처리할 수 있게 도와준다
🍯 pandas는 numpy를 기반으로 만들어졌지만 좀 더 복잡한 데이터 분석에 특화
🍯 numpy가 같은 데이터 타입의 배열만 처리할 수 있는데 반해 pandas는 데이터 타입이 다양하게 섞여 있을 때도 처리 가능
📌 공식 홈페이지 : https://pandas.pydata.org/
2. 구조적 데이터 생성하기
1) Series를 활용한 데이터 생성
🍋 pandas에서 데이터를 생성하는 가장 기본적인 방법은 Series()를 이용하는 것
🍋 Series()를 이용하면 Series 형식의 구조적 데이터(라벨을 갖는 1차원 데이터)를 생성할 수 있음.
📌 다음은 Series()를 이용해 Series 형식의 데이터를 생성하는 방법
s = pd.Series(seq_data)
🍋 Series()의 인자로는 시퀀스 데이터가 들어감
🍋 시퀀스 데이터로는 리스트와 튜플 타입의 데이터를 모두 사용할 수 있지만 주로 리스트 데이터를 이용
import pandas as pd
s1 = pd.Series([10, 20, 30, 40, 50])
print(s1)
s1
📌 위 쪽의 결과는 print(s1)의 결과
아래 쪽의 결과는 s1 만 실행했을 때 출력되는 결과 (주피터 노트북 사용 )
s1 = pd.Series([10, 20, 30, 40, 50])
s1.index
# 실행 출력
# RangeIndex(start=0, stop=5, step=1)
s1.values
🍋 numpy의 경우 배열의 모든 원소가 데이터 타입이 같아야 했지만 pandas의 경우에는 원소의 데이터 타입이 달라도 저장 가능
s2 = pd.Series(['a', 'b', 'c', 1, 2, 3]) # 넘파이 였다면 모두 문자열로 변경.
print(s2)
# 0 a
# 1 b
# 2 c
# 3 1
# 4 2
# 5 3
# dtype: object
# 변수 s2에는 문자열과 숫자가 혼합이 되어 있어서 타입이 object
3) np.nan
🍋 데이터가 없으면 numpy를 임포트한 후 np.nan으로 데이터가 없음을 표시할 수 있음
import numpy as np
s3 = pd.Series([np.nan, 10, 30])
print(s3)
'''
출력결과)
0 NaN -> 데이터를 위한 자리 index는 있지만 실제 값이 없음.
1 10.0
2 30.0
dtype: float64
'''
4) index
🍋 Series 데이터를 생성할 때 인자로 index 추가 가능
▶️ 인자로 index를 명시적으로 입력하면 Series 변수(s)의 index에는 자동 생성되는 index 대신 index_seq가 들어가게 됨
▶️ index_seq도 리스트와 튜플 타입의 데이터를 모두 사용가능하지만 주로 리스트를 사용
▶️ 주의할 점은 seq_data의 항목 개수와 index_seq의 항목 개수가 같아야 함
s = pd.Series(seq_data, index = index_seq)
# 어느 가게의 날짜별 판매량을 pandas의 Series 형식으로 입력. 하루는 데이터가 없어서 np.nan을 입력
index_data = ['2018-10-07', '2018-10-08', '2018-10-09', '2018-10-10']
s4 = pd.Series([200, 195, np.nan, 205], index=index_data)
s4
s4.index
# Index(['2018-10-07', '2018-10-08', '2018-10-09', '2018-10-10'], dtype='object')
🍋 파이썬의 딕셔너리를 사용하면 데이터와 index를 함께 입력할 수 있음
▶️ 입력 인자로 딕셔너리 데이터를 입력하면 딕셔너리 데이터의 키 key와 값 value이 각각 Series 데이터의 index와 values로 들어감
s = pd.Series(dict_data)
s5 = pd.Series({'국어': 100, '영어': 95, '수학': 90})
s5
'''
국어,100
영어,95
수학,90
'''
3. 날짜 자동 생성 : data_range()
🚀 입력해야 할 날짜가 많으면 pandas에서 날짜를 자동생성하는 data_range() 사용
🚀 몇 가지 설정만 하면 원하는 날짜를 자동으로 생성하므로 날짜 데이터를 입력할 때 편리
pd.date_range(start=None, end=None, periods=None, freq='D'
👾 start는 시작날짜, end는 끝날짜
👾 periods는 날짜 데이터 생성 기간 = 생성 갯수
👾 freq는 날짜 데이터 생성 주기
👾 start는 필수이고, end나 periods는 둘 중 하나만 있어도 됨
👾 freq는 입력하지 않으면 'D' 옵션이 설정돼 달력날짜 기준으로 하루씩 증가
# 시작 날짜와 끝 날짜를 지정해 날짜 데이터를 생성. 하루씩 증가한 날짜 데이터가 생성.
pd.date_range(start='2019-01-01', end='2019-01-07')
'''
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
'2019-01-05', '2019-01-06', '2019-01-07'],
dtype='datetime64[ns]', freq='D')
'''
1) 날짜 데이터 형식
🚀 날짜 데이터를 입력할 때 yyyy-mm-dd yyyy/mm/dd, yyyy.mm.dd, mm-dd-yyyy, mm/dd/yyyy, mm.dd.yyyy
형식 사용가능
▶️ 대신 출력은 yyyy-mm-dd 형식으로 생성
pd.date_range(start='2019/01/01', end='2019.01.07')
'''
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
'2019-01-05', '2019-01-06', '2019-01-07'],
dtype='datetime64[ns]', freq='D')
'''
pd.date_range(start='2019-01-01', end='01.07.2019')
'''
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
'2019-01-05', '2019-01-06', '2019-01-07'],
dtype='datetime64[ns]', freq='D')
'''
# 끝 날짜를 지정하지 않고 periods만 입력해서 날짜 생성.
pd.date_range(start='2019-01-01', periods=7)
'''
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
'2019-01-05', '2019-01-06', '2019-01-07'],
dtype='datetime64[ns]', freq='D')
'''
2) pandas data_range() 함수의 freq 옵션
약어 | 설명 | 사용 예 |
D | 달력 날짜 기준 하루 주기 | 하루 주기: freq = 'D', 이틀 주기: freq = '2D' |
B | 업무 날짜 기준 하루 주기 | 업무일(월~금) 기준으로 생성, freq = 'B', freq = '3B' |
W | 일요일 시작 기준 일주일 주기 | 월요일: W-MON, 화요일: W-TUE, freq = 'W', freq = 'W-MON' |
M | 월말 날짜 기준 주기 | 한 달 주기: freq = 'M', 네 달 주기: freq = '4M' |
BM | 업무 월말 날짜 기준 주기 | freq = 'BM' , freq = '2BM' |
MS | 월초 날짜 기준 주기 | freq = 'MS' , freq = '2MS' |
BMS | 업무 월초 날짜 기준 주기 | freq = 'BMS' , freq = '2BMS' |
Q | 분기 끝 날짜 기준 주기 | freq = 'Q' , freq = '2Q' |
BQ | 업무 분기 끝 날짜 기준 주기 | freq = 'BQ' , freq = '2BQ' |
QS | 분기 시작 날짜 기준 주기 | freq = 'QS' , freq = '2QS' |
BQS | 업무 분기 시작 날짜 기준 주기 | freq = 'BQS' , freq = '2BQS' |
A | 일년 끝 날짜 기준 주기 | freq = 'A' , freq = '2A' |
BA | 업무 일년 끝 날짜 기준 주기 | freq = 'BA' , freq = '2BA' |
AS | 일년 시작 날짜 기준 주기 | freq = 'AS' , freq = '2AS' |
BAS | 업무 일년 시작 날짜 기준 주기 | freq = 'BAS' , freq = '2BAS' |
H | 시간 기준 주기 | 1시간 주기: freq = 'H' , 2시간 주기: freq = '2H' |
BH | 업무 시간 기준 주기 | 업무 시간(09:00 ~ 17:00) 기준으로 생성 |
T, min | 분 주기 | 10분 주기: freq = '10T' , 30분 주기: freq = '30min' |
S | 초 주기 | 1초 주기: freq = 'S' , 10초 주기: freq = '10S' |
# 2일씩 증가하는 날짜를 생성
pd.date_range(start='2019-01-01', periods=4, freq='2D')
# DatetimeIndex(['2019-01-01', '2019-01-03', '2019-01-05', '2019-01-07'],
# dtype='datetime64[ns]', freq='2D')
# 달력의 요일을 기준으로 일주일씩 증가하는 날짜를 생성.
pd.date_range(start='2019-01-06', periods=4, freq='W')
# DatetimeIndex(['2019-01-06', '2019-01-13', '2019-01-20', '2019-01-27'],
# dtype='datetime64[ns]', freq='W-SUN')
# 업무일 기준 2개월 월말 주기로 12개 날짜를 생성.
pd.date_range(start='2019-01-01', periods=12, freq='2BM')
'''
DatetimeIndex(['2019-01-31', '2019-03-29', '2019-05-31', '2019-07-31',
'2019-09-30', '2019-11-29', '2020-01-31', '2020-03-31',
'2020-05-29', '2020-07-31', '2020-09-30', '2020-11-30'],
dtype='datetime64[ns]', freq='2BM'
'''
# 분기 시작일을 기준으로 4개의 날짜를 생성
pd.date_range(start='2019-01-01', periods=4, freq='QS')
# DatetimeIndex(['2019-01-01', '2019-04-01', '2019-07-01', '2019-10-01'],
# dtype='datetime64[ns]', freq='QS-JAN')
[ 시간 생성 ]
# 1시간 주기로 10개의 시간을 생성한 예
pd.date_range(start='2019-01-01 08:00', periods=10, freq='H')
'''
DatetimeIndex(['2019-01-01 08:00:00', '2019-01-01 09:00:00',
'2019-01-01 10:00:00', '2019-01-01 11:00:00',
'2019-01-01 12:00:00', '2019-01-01 13:00:00',
'2019-01-01 14:00:00', '2019-01-01 15:00:00',
'2019-01-01 16:00:00', '2019-01-01 17:00:00'],
dtype='datetime64[ns]', freq='H')
'''
# 업무 시간을 기준으로 1시간 주기로 10개의 시간을 생성하는 예
# 업무 시간은 9시 부터 17시까지이므로 start시간을 9시 이전으로 설정해도 9시 부터 표시.
pd.date_range(start='2019-01-01 08:00', periods=10, freq='BH')
'''
DatetimeIndex(['2019-01-01 09:00:00', '2019-01-01 10:00:00',
'2019-01-01 11:00:00', '2019-01-01 12:00:00',
'2019-01-01 13:00:00', '2019-01-01 14:00:00',
'2019-01-01 15:00:00', '2019-01-01 16:00:00',
'2019-01-02 09:00:00', '2019-01-02 10:00:00'],
dtype='datetime64[ns]', freq='BH')
'''
# date_range()를 이용해 Series의 index를 지정한 예.
index_date = pd.date_range(start='2019-03-01', periods=5, freq='D')
s = pd.Series([51, 62, 55, 49, 58], index=index_date)
s
'''
2019-03-01,51
2019-03-02,62
2019-03-03,55
2019-03-04,49
2019-03-05,58
'''
[ 내용 참고: IT 학원 강의 ]
'Programming Language > Python' 카테고리의 다른 글
[Python] Pandas | 통계 메서드, 판다스 데이터 읽기 read_csv() (0) | 2024.03.12 |
---|---|
[Python] 판다스(Pandas) | DataFrame 데이터생성, Series와 DataFrame 데이터 연산 방법 (0) | 2024.03.12 |
[Python] 넘파이(NumPy) | 배열의 연산, 배열의 인덱싱과 슬라이싱 (0) | 2024.03.11 |
[Python] 넘파이(Numpy) | 정의, 배열 생성 방법 및 관련 함수, 데이터 형식 (0) | 2024.03.11 |
[Python] 웹 크롤링 | 이미지 가져오기 및 저장 (0) | 2024.03.10 |