반응형
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 |
댓글