귀여운 까미를 보고 힘내자 😌
현재 있는 위치를 설정하여
timestampr로 나온 결과를 년월일시와 시분초로 출력할 수 있습니다
import pandas as pd
#unit = s (설정한 데이터가 초단위 임을 명시)
date = pd.Timestamp(1626746933.284287, unit='s', tz='Asia/Seoul')
print(date,type(date))
문자열 형태끼리는 계산이 안 됩니다.
시간을 표현하는 데이터도 문자열로 되어있을 경우 연산이 안 되는데요.
그럴 경우에는 새로운 컬럼을 만들어서 datetime형태로 저장해 주는 방법이 있습니다.
#새로운 컬럼을 만들고 datetime형태로 저장하기
df['New_Date] = pd.to_datetime(df['Date])
df.info()
#주의! 아래 같이 만들면 안 됩니다
#df.NewDate
#새로만든 컬럼은 Date와 같은 형태이기 때문에 삭제
df.drop('Date', inplace=True)
df['year'] = df['New_Date'].df.year
df['month'] = df['New_Date'].df.month
df['day'] = df['New_Date'].df.day
#New_Date의 값을 컬럼으로 만들기
df.set_index('New_Date', inplace=True)
#head()를 통해 확인
df.head()
위의 데이터프레임을 활용하여
지정한 날짜를 대입 할 수 있습니다.
df_ymd_range = df['2018-06-01' : '2018-06-14']
df_ymd_range
날짜가 datetime 형태라면
인덱싱도 할 수 있습니다.
원하는 날짜만 딱! 잘라서 결과를 볼 수 있어요.
df_ym = df.loc['2018-06', 'Start' : 'High']
#출력
df_ym
time.time()으로 시간을 출력하면 결과는 실수형인 float로 출력됩니다.
float 타입도 datetime으로 변환하는 것을 살펴봅시다.
#파이썬 활용
t = time.time()
#fromtimestamp활용
d = datetime.fromtimestamp(t)
print(d, type(d))
#판다스 활용
#to_datetime
import pandas as pd
pd.to_datetime(1626747969.0, unit='s')
import numpy as np
from datetime import datetime
dates = {datetime(2011,1,2), datetime(2011,1,5),
datetime(2011,1,7), datetime(2011,1,8),
datetime(2011,1,10), datetime(2011,1,12)]
ts = pd.Series(no.random.randn(6), index=dates)
#결과
2011-01-02 -1.234883
2011-01-05 1.269891
2011-01-07 2.387163
2011-01-08 0.080280
2011-01-10 0.959532
2011-01-12 -0.159513
dtype: float64
날짜 한 개씩 건너뛰어서 보여주기
#처음부터 끝까지 1칸씩 건너 뛰어서 출력
ts[::2]
#결과
2011-01-02 -1.234883
2011-01-07 2.387163
2011-01-10 0.959532
dtype: float64
ts dataframe과 1칸 씩 건너 뛴 ts dataframe을 빼기
ts + ts[::2]
#각 인덱스와 동일한 값끼리 계산된다
#인덱스가 없을 경우 더할 값이 없기 때문에 NaN 반환
#결과
2011-01-02 -2.469765
2011-01-05 NaN
2011-01-07 4.774325
2011-01-08 NaN
2011-01-10 1.919063
2011-01-12 NaN
dtype: float64
#NaN이 안 생기도록 fill_value=0을 설정해줌
#ts.add(ts[::2], fill_value=0)
#인덱스 0번째를 호출하면 가장 처음에 있는 2011년 1월 2일 정보가 나옵니다
ts.index[0]
stamp = ts.index[2]
ts[stamp]
#결과
2011-01-07에 대한 값
2.387163
#슬래시로 날짜 지정
print(ts['1/10/2011'])
#결과
0.9595317393506101
#콤마 안에 날짜 지정
ts['20110110']
#결과
0.9595317393506101
판다스의 시리즈를 활용합니다.
longer_ts = pd.Seriese(no.random.randn(1000),
index=pd.date_rage('1/1/2000', periods=1000))
#결과
#2000년 1월 1일 부터 1일씩 나아가는 1000개의 날짜 데이터가 생성됨
#위의 데이터 프레임에서 5월 데이터를 5일 간격으로 출력
longer_ts['2011-05'][:5]
#결과
2001-05-01 -1.561267
2001-05-02 1.149984
2001-05-03 0.823273
2001-05-04 2.342749
2001-05-05 0.448408
Freq: D, dtype: float64
ts[datetime(2011,1,7):]
#결과
2011-01-07 2.387163
2011-01-08 0.080280
2011-01-10 0.959532
2011-01-12 -0.159513
dtype: float64
truncate를 사용하면
지정한 날짜에 있는 값들만 나옵니다
- truncate before, after 순서로 사용
print(ts.truncate(before='2011-01-05', after='2011-01-10'))
#결과
2011-01-05 1.269891
2011-01-07 2.387163
2011-01-08 0.080280
2011-01-10 0.959532
dtype: float64
#2011년 1월 9일 이전 값이 나오도록 설정
print(ts.truncate(after='1/9/2011'))
#결과
2011-01-02 -1.234883
2011-01-05 1.269891
2011-01-07 2.387163
2011-01-08 0.080280
dtype: float64
date_range() 활용합니다
pd.date_range('2020-10-7', '2020-10-20')
#결과
DatetimeIndex(['2020-10-07', '2020-10-08', '2020-10-09', '2020-10-10',
'2020-10-11', '2020-10-12', '2020-10-13', '2020-10-14',
'2020-10-15', '2020-10-16', '2020-10-17', '2020-10-18',
'2020-10-19', '2020-10-20'],
dtype='datetime64[ns]', freq='D')
#현재 날짜, 시간 출력
now = datetime.now()
#2주치 데이터가 나오도록 지정
#weeks=2를 활용
in_two_weeks = now+timedelta(weeks=2)
#2주치 날짜 인덱스 만들기
#date_range활용
pd.date_range(datetime.now(), in_two_weeks)
periods 매개변수는 date_range함수에 전달된 시작날짜 시간과, 종료날짜 시간을
periods 매개변수에 설정한 수와 동일하게 나눠 출력합니다.
#2020년 10월 1일부터 2020년 10월 20일까지 5개의 구간으로 나눠서 출력
pd.date_range(start='2020-10-01', end='2020-10-20', periods=5)
#결과
DatetimeIndex(['2020-10-01 00:00:00', '2020-10-05 18:00:00',
'2020-10-10 12:00:00', '2020-10-15 06:00:00',
'2020-10-20 00:00:00'],
dtype='datetime64[ns]', freq=None)
#날짜부분만 출력
#normalize=True 설정
pd.date_range('2012-05-02 12:56:31', periods=5, normalize=True)
#결과
DatetimeIndex(['2012-05-02', '2012-05-03', '2012-05-04', '2012-05-05',
'2012-05-06'],
dtype='datetime64[ns]', freq='D')
date_range(), periods, freq='W-WED 를 활용합니다.
#매주 수요일 간격으로 날짜 데이터 출력
import numpy as np
date = pd.date_range('1/1/2000', periods=100, freq='W-WED')
print(date)
#4일씩 건너뛰는 날짜 데이터프레임 만듬
long_df = pd.DataFrame(np.random.rand(100,4),
index = dates,
columns=['Colorado','Texas','New York','Ohio']
#6월만 인덱스로 따로 뽑음
long_df.loc['2001-06]
먼저 일부러 중복값이 있는 데이터 프레임을 만듭니다
date = pd.DatetimeIndex(['1/1/2000', '1/2/2000','1/2/2000', '1/2/2000', '1/3/2000'])
dup_ts = pd.Series(np.arange(5), index=dates)
#결과
2000-01-01 0
2000-01-02 1
2000-01-02 2
2000-01-02 3
2000-01-03 4
isunique()를 활용하여
문자열에 고유문자가 있으면 True를, 아니면 False를 출력합니다
dup_ts.index.is_unique
dup_ts['1/3/2000']
#결과
4
중복이 없기 때문에
2000-01-03이가진 4를 출력합니다
dup_ts['1/2/2000']
#중복값이 있는 날짜데이터는 슬라이스로 출력됩니다.
#결과
2000-01-02 1
2000-01-02 2
2000-01-02 3
#인덱스를 기준으로 groupby()
grouped = dup_ts.groupby(level=0) #level=0은 인덱스를 기준으로 하겠다는 뜻
print(grouped.mean())
grouped.count()
#결과
#평균
2000-01-01 0
2000-01-02 2
2000-01-03 4
dtype: int64
#개수세기
2000-01-01 1
2000-01-02 3
2000-01-03 1
dtype: int64
date_ragne와 freq를 활용합니다
pd.date_range('2001-01-01', '2000-01-03', freq='4h')
#결과
DatetimeIndex(['2000-01-01 00:00:00', '2000-01-01 04:00:00',
'2000-01-01 08:00:00', '2000-01-01 12:00:00',
'2000-01-01 16:00:00', '2000-01-01 20:00:00',
'2000-01-02 00:00:00', '2000-01-02 04:00:00',
'2000-01-02 08:00:00', '2000-01-02 12:00:00',
'2000-01-02 16:00:00', '2000-01-02 20:00:00',
'2000-01-03 00:00:00', '2000-01-03 04:00:00',
'2000-01-03 08:00:00', '2000-01-03 12:00:00',
'2000-01-03 16:00:00', '2000-01-03 20:00:00'],
dtype='datetime64[ns]', freq='4H')
from pandas.tseries.offset import Hour, Minute
#2시간과 30분을 더해라
Hour(2) + Minute(30)
#결과
<150 * Minutes>
freq='시간'을 활용합니다
#2001년 1월 1일부터 10개의 날짜를 1시간 30분 단위로 나눠서 출력하세요
pd.date_range('2001-01-01', periods=10, freq='1h30min')
#결과
DatetimeIndex(['2000-01-01 00:00:00', '2000-01-01 01:30:00',
'2000-01-01 03:00:00', '2000-01-01 04:30:00',
'2000-01-01 06:00:00', '2000-01-01 07:30:00',
'2000-01-01 09:00:00', '2000-01-01 10:30:00',
'2000-01-01 12:00:00', '2000-01-01 13:30:00'],
dtype='datetime64[ns]', freq='90T')
freq='WOM-3FRI'활용
#WOM = WEEK OF MONTH > 매 달을 의미
# 3FRI >3번째 주 금요일을 의미
rng = pd.date_range('2001-01-01, '2012-09-01', freq='WOM-3FRI)
#결과
DatetimeIndex(['2000-01-21', '2000-02-18', '2000-03-17', '2000-04-21',
'2000-05-19', '2000-06-16', '2000-07-21', '2000-08-18',
'2000-09-15', '2000-10-20',
...
'2011-11-18', '2011-12-16', '2012-01-20', '2012-02-17',
'2012-03-16', '2012-04-20', '2012-05-18', '2012-06-15',
'2012-07-20', '2012-08-17'],
dtype='datetime64[ns]', length=152, freq='WOM-3FRI')