본문 바로가기
개발/Python

datetime

by 피로물든딸기 2025. 9. 14.
반응형

전체 링크

 

date_range

import pandas as pd

start = '2024-01-01'
end = '2024-01-05'

# 하루 단위
daily = pd.date_range(start=start, end=end, freq='D')
print("Daily:")
print(daily)

# 월 단위
monthly = pd.date_range(start=start, end=end, freq='M')
print("\nMonthly:") # MS : 첫 날
print(monthly)

# 시간 단위
hourly = pd.date_range(start=start, end=end, freq='H')
print("\nHourly:")
print(hourly[:10])

 

date_range + periods

import pandas as pd

# 시작 날짜와 기간(period) 개수를 지정
rng = pd.date_range(start='2025-01-01', periods=7, freq='D')
rng

 

strptime

from datetime import datetime

# 예시 1: 기본적인 날짜 변환
date_str = "2025-09-14"
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
print(date_obj)  # 2025-09-14 00:00:00

# 예시 2: 날짜와 시간 변환
datetime_str = "2025-09-14 18:30:45"
datetime_obj = datetime.strptime(datetime_str, "%Y-%m-%d %H:%M:%S")
print(datetime_obj)  # 2025-09-14 18:30:45

# 예시 3: 다른 포맷
date_str2 = "14/09/2025 06:30 PM"
date_obj2 = datetime.strptime(date_str2, "%d/%m/%Y %I:%M %p")
print(date_obj2)  # 2025-09-14 18:30:00

 

timedelta

from datetime import datetime, timedelta

# 현재 시간
now = datetime.now()
print("현재 시간:", now) # 2025-09-14 18:56:03.455802

# 12시간 더하기
future_time = now + timedelta(hours=12)
print("12시간 후:", future_time) # 2025-09-15 06:56:03.455802

 

total_seconds()

from datetime import datetime, timedelta

# 예시: 두 시간의 차 계산
time1 = datetime(2025, 9, 14, 8, 0, 0)
time2 = datetime(2025, 9, 14, 18, 30, 0)

# 시간 차 계산
delta = time2 - time1
print("시간 차:", delta)  # 10:30:00

# 시간 차를 초 단위로 변환
seconds = delta.total_seconds()
print("초 단위:", seconds)  # 37800.0

 

dt

import pandas as pd

data = {
    'date': ['2023-01-15', '2023-03-22', '2024-07-09']
}
df = pd.DataFrame(data)

# 문자열을 datetime으로 변환
df['date'] = pd.to_datetime(df['date'])

df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day

df['weekday_number'] = df['date'].dt.weekday # 월=0, 일=6
df['dayofweek'] = df['date'].dt.dayofweek   # 월=0, 일=6
df['weekday_name'] = df['date'].dt.day_name()  # Monday, Tuesday ...

df['month_name'] = df['date'].dt.month_name()
df['quarter'] = df['date'].dt.quarter

df['time'] = df['date'].dt.time
df['hour'] = df['date'].dt.hour
df['minute'] = df['date'].dt.minute

df


shift

import pandas as pd

# 예시 데이터 생성
data = {
    'date_str': ['2025-10-10', '2025-10-12', '2025-10-15', '2025-10-20']
}

df = pd.DataFrame(data)

# datetime 타입으로 변환
df['date'] = pd.to_datetime(df['date_str'])

# 다음 행과의 day 차이 계산
df['day_diff'] = df['date'] - df['date'].shift(1)
df['day_diff'] = df['day_diff'].dt.days  # timedelta를 일(day)로 변환

df


날짜별 합 (rolling)

import pandas as pd

data = {'value': [1, 2, 3, 4, 5, 6, 7]}
df = pd.DataFrame(data)

# 3행씩 합계
df['rolling_sum'] = df['value'].rolling(window=3).sum()
df

 

min_periods 옵션

df['rolling_sum2'] = df['value'].rolling(window=3, min_periods=1).sum()
df

 

7일간 합

import pandas as pd
import numpy as np

np.random.seed(1234)  # 재현성을 위해 시드 고정

# 30일치 날짜 생성 (연속된 날짜)
dates = pd.date_range(start='2025-10-01', periods=30, freq='D')

# 각 날짜에 대한 임의 값 생성 (예: 1~10 사이)
values = np.random.randint(1, 11, size=len(dates))

# 데이터프레임 생성
df = pd.DataFrame({'date': dates, 'value': values})

# 7일 합 (현재 날짜 포함 과거 6일)
df['7day_sum'] = df['value'].rolling(window=7, min_periods=1).sum()

df

 

불연속 date인 경우

import pandas as pd
import numpy as np

# 연속적이지 않은 날짜 생성
dates = pd.to_datetime([
    '2025-10-01', '2025-10-02', '2025-10-04', '2025-10-07',
    '2025-10-08', '2025-10-10', '2025-10-12'
])
values = [5, 3, 6, 2, 7, 4, 1]

df = pd.DataFrame({'date': dates, 'value': values})

# 날짜 기준 7일 window로 합계 계산
df = df.set_index('date')
df['7day_sum'] = df['value'].rolling('7d').sum()  # 7일 전까지 합
df

반응형

'개발 > Python' 카테고리의 다른 글

앙상블 (Ensemble)  (0) 2025.09.14
T 검정  (0) 2025.09.14
LogisticRegression Hyper Parameters and Attributes  (0) 2025.09.14
카이제곱 검정  (0) 2025.09.14
DecisionTree Hyper Parameters and Attributes  (0) 2025.09.08

댓글