Python Pandas 날짜 데이터 다루기

Page content

개요

  • 연도, 월, 주만 있는 컬럼을 날짜 데이터 타입으로 변경하려면 어떻게 해야할까?
  • 약간의 트릭이 필요하다

데이터 생성

  • 가상의 데이터를 생성한다.
import pandas as pd

data = [
    {"year": 2020, "month": 1, "week": 2, "company" : "A회사", "revenue_pct" : 49},
    {"year": 2020, "month": 1, "week": 2, "company" : "B회사", "revenue_pct" : 51},
    {"year": 2021, "month": 1, "week": 2, "company" : "A회사", "revenue_pct" : 37},
    {"year": 2021, "month": 1, "week": 2, "company" : "B회사", "revenue_pct" : 63},
    {"year": 2022, "month": 12, "week": 1, "company" : "A회사", "revenue_pct" : 70},
    {"year": 2022, "month": 12, "week": 1, "company" : "B회사", "revenue_pct" : 30},
]

df = pd.DataFrame(data)
df

Untitled

ChatGPT 방식

  • chatGPT에서 알려준 방식으로 진행해본다.
df["date"] = pd.to_datetime(df["year"].astype(str) + df["week"].astype(str) + '1', format="%Y%W%w")
df

Untitled

  • 기대했던 것은 2022-12-1 일 방식인데, 2022-01-03이다.
  • 만약, 전체데이터가 있다면, date 날짜가 중복될 수 있다.

수정된 방식

  • 아래와 같이 수정하도록 한다.
    • 두번째 라인 코드 7-6 은 일종의 특정 일자를 지정하는 것이다.
df["date"] = pd.to_datetime(df["year"].astype(str) + "-" + df["month"].astype(str))
df["date"] = df["date"] + pd.to_timedelta(df["week"] * 7 - 6, unit="D")
df

Untitled

시각화

  • 시각화를 구현해본다.
import seaborn as sns
import matplotlib.pyplot as plt

plt.rc('font', family='S-Core Dream')

fig, ax = plt.subplots(figsize=(10, 6))
sns.lineplot(df, x = 'date', y = 'revenue_pct', hue = 'company')
plt.show()

Untitled