Python

[Pandas] 구조적 데이터 생성하기

주댕이 2024. 1. 17. 16:35

# Series를 활용한 데이터 생성

import pandas as pd
s = pd.Series(seq_data)
  • Series()의 인자로는 시퀀스 데이터(seq_data)가 들어간다.
  • 시퀀스 데이터로는 리스트와 튜플 타입의 데이터를 모두 사용할 수 있지만, 주로 리스트 데이터를 이용한다.
  • Series 데이터에서는 세로축 라벨을 index라고 하고, 입력한 시퀀스 데이터를 values라고 한다.
s1 = pd.Series([10, 20, 30, 40, 50])
s1
# 0    10
# 1    20
# 2    30
# 3    40
# 4    50
# dtype: int64
s1.index  # RangeIndex(start=0, stop=5, step=1)
s1.values  # array([10, 20, 30, 40, 50], dtype=int64)

 

  • NumPy의 경우 배열의 모든 원소가 데이터 타입이 같아야 했지만, Pandas의 경우에는 원소의 데이터 타입이 달라도 된다.
s2 = pd.Series(['a', 'b', 'c', 1, 2, 3])
s2
# 0    a
# 1    b
# 2    c
# 3    1
# 4    2
# 5    3
# dtype: object

 

  • 데이터가 없으면, NumPy를 임포트한 후에 np.nan으로 데이터가 없다고 표시할 수 있다.
import numpy as np

s3 = pd.Series([np.nan, 10, 30])  # NaN: 결측치, missing values
s3
# 0     NaN
# 1    10.0
# 2    30.0
# dtype: float64

 

  • Series 데이터를 생성할 때, 인자로 index를 추가할 수 있다.
s = pd.Series(seq_data, index = index_seq)
  • 인자로 index를 명시적으로 입력하면 Series 변수(s)의 index에는 자동 생성되는 index 대신 index_seq가 들어가게 된다.
  • index_seq도 리스트와 튜플 타입의 데이터를 모두 사용할 수 있지만, 주로 리스트 데이터를 이용한다.
  • 주의: seq_data 항목의 개수와 index_seq 항목의 개수는 같아야 한다.
index_date = ['2018-10-07', '2018-10-08']
s4 = pd.Series([200, 195], index = index_date)
s4
# 2018-10-07    200
# 2018-10-08    195
# dtype: int64

 

  • 딕셔너리를 이용하면 데이터와 index를 함께 입력할 수 있다.
s = pd.Series(dict_data)
  • 딕셔너리 데이터의 키(keys)와 값(vlaues)이 각각 Series 데이터의 index와 values로 들어간다.
data_dict = {
    '국어': 100,
    '영어': 95,
    '수학': 90
}
s5 = pd.Series(data_dict)
s5
# 국어    100
# 영어     95
# 수학     90
# dtype: int64

 

 

# 날짜 자동 생성

pd.date_range(start=None, end=None, periods=None, freq='D')
  • start: 시작 날짜, end: 끝 날짜, periods: 날짜 데이터 생성 기간, freq: 날짜 데이터 생성 주기
  • start는 반드시 있어야 하며, end나 periods는 둘 중 하나만 있어도 된다.
  • freq를 입력하지 않으면 'D' 옵션이 설정되어 달력 날짜 기준으로 하루씩 증가한다.
pd.date_range(start='2024/01/01', end='2024.01.07')
# DatetimeIndex(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04',
#                '2024-01-05', '2024-01-06', '2024-01-07'],
#               dtype='datetime64[ns]', freq='D')
pd.date_range(start='2024/01/01', periods = 7)
# DatetimeIndex(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04',
#                '2024-01-05', '2024-01-06', '2024-01-07'],
#               dtype='datetime64[ns]', freq='D')
pd.date_range(start='2024/01/01', periods = 4, freq = '2D')
# DatetimeIndex(['2024-01-01', '2024-01-03', '2024-01-05', '2024-01-07'],
#               dtype='datetime64[ns]', freq='2D')
pd.date_range(start='2024-01-01 08:00', periods = 4, freq = 'H')
# DatetimeIndex(['2024-01-01 08:00:00', '2024-01-01 09:00:00',
#                '2024-01-01 10:00:00', '2024-01-01 11:00:00'],
#               dtype='datetime64[ns]', freq='H')

 

 

# DataFrame을 활용한 데이터 생성

df = pd.DataFrame(data [, index = index_data, columns = columns_data])
  • DataFrame()의 인자인 data에는 리스트와 형태가 유사한 데이터 타입은 모두 사용할 수 있다. 즉, 리스트와 딕셔너리 타입의 데이터, NumPy의 배열 데이터, Series나 DataFrame 타입의 데이터를 입력할 수 있다.
  • DataFrame의 세로축 라벨: index, 가로축 라벨: columns, 관심 있는 데이터: values
  • 주의: DataFrame의 data의 행 개수와 index 요소의 개수, data 열의 개수와 columns 요소의 개수가 일치해야 한다.
  • index와 columns는 선택사항이므로 입력하지 않을 수 있는데, 그러면 index와 columns에는 자동으로 0부터 숫자가 생성되어 채워진다.
table_data = {
    '연도': [2015, 2016, 2016, 2017, 2017],
    '지사': ['한국', '한국', '미국', '한국', '미국'],
    '고객 수': [200, 250, 450, 300, 500]
}
table_data
# {'연도': [2015, 2016, 2016, 2017, 2017],
#  '지사': ['한국', '한국', '미국', '한국', '미국'],
#  '고객 수': [200, 250, 450, 300, 500]}
data = pd.DataFrame(table_data)
data

data.index  # RangeIndex(start=0, stop=5, step=1)
data.values
# array([[2015, '한국', 200],
#        [2016, '한국', 250],
#        [2016, '미국', 450],
#        [2017, '한국', 300],
#        [2017, '미국', 500]], dtype=object)
data.values.shape  # (5, 3)
data.columns  # Index(['연도', '지사', '고객 수'], dtype='object')
728x90

'Python' 카테고리의 다른 글

[Python] Requests와 BeautifulSoup를 활용한 크롤링  (2) 2024.01.31
[Pandas] 데이터 연산  (0) 2024.01.17
[NumPy] NumPy 조건문  (0) 2024.01.17
[NumPy] 배열의 인덱싱과 슬라이싱  (0) 2024.01.17
[NumPy] 배열의 연산  (0) 2024.01.17