-
Pandas와 친해지기(10분 Pandas) (2024-02-03)코딩 공부/Pandas 2024. 2. 3. 14:04
For Uploading a Blog Time series (2024-02-03)¶
시계열 데이터에서 1초 마다 측정된 데이터를 5분 마다 측정된 데이터의 형태로 바꾸고 싶을 때 어떻게 해야하는지
그리고 그 시계열 단위인 주기(frequency)를 다시 샘플링 할 수 있음In [ ]:rng = pd.date_range("1/1/2012", periods=100, freq ="s") #대강 시작기준날짜, 몇개, (데이터간 차이나는)단위 느낌인듯하다 ts = pd.Series(np.random.randint(0,500,len(rng)), index=rng) ts.resample("5Min").sum()
2012-01-01 24590 Freq: 5T, dtype: int32
resample에 대하여¶
In [ ]:idx = pd.date_range("2018-01-01", periods=5, freq="h") ts2 = pd.Series(range(len(idx)), index=idx) ts2
2018-01-01 00:00:00 0 2018-01-01 01:00:00 1 2018-01-01 02:00:00 2 2018-01-01 03:00:00 3 2018-01-01 04:00:00 4 Freq: H, dtype: int64
In [ ]:ts2.resample("2h").mean()
2018-01-01 00:00:00 0.5 2018-01-01 02:00:00 2.5 2018-01-01 04:00:00 4.0 Freq: 2H, dtype: float64
In [ ]:print(type(ts2))
<class 'pandas.core.series.Series'>
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.resample.html#pandas.Series.resample
우선 2.0.0버전 이후로는 사라지게 될 듯한 기능이며 후에는 frame.T.resample을 대신 사용하라고 한다
(지금 내가 사용하는 pandas 버전이 2.0.3인데 아직 존재는 하는듯하다?)
resample: https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-resampling
흠 frame.T.resample이 뭔지 궁금해서 검색했는데 따로 나오지는 않은 것같다
(Dataframe.T정도는 있긴한데 다른내용으로 행과 열을 바꿔주는 transpose를 의미하는 듯하다)
그리고 그냥 series, df, df의 groupby했을때 series와 df 모두에 사용가능한 듯하다
그런데 쓰이는 파라미터의 rule에 대해서 어떤 것을 쓸 수 있는 지 궁금해서 알고 싶은데 그냥 DataOffset, Timedelta or str로 적혀있다
현재 예제들로 확인 된 것은 str으로 적을 때 숫자+ 시간은 'h', 초는 's', 분은 month의 m과 중복되서 그런지 'min'로 쓰이는 것을 확인하였다
관련한 듯한 내용: https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#dateoffset-objects
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.tseries.offsets.DateOffset.html#pandas.tseries.offsets.DateOffset
timedelta: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Timedelta.html#pandas.Timedelta
GPT한테 물어봐도 https://chat.openai.com/share/4e050491-79e0-44a5-bd1d-38a4f2d1e92f
크게 다르진 않는 듯하다
그냥 관련한 듯한 내용에 적힌 string부분을 참고하는 것만으로도 충분한듯 하다In [ ]:rng = pd.date_range("3/6/2012 00:00", periods=5, freq="D") ts = pd.Series(np.random.random(len(rng)),rng) ts
2012-03-06 0.070345 2012-03-07 0.290614 2012-03-08 0.980420 2012-03-09 0.984008 2012-03-10 0.641380 Freq: D, dtype: float64
In [ ]:ts_utc = ts.tz_localize("UTC") ts_utc
2012-03-06 00:00:00+00:00 0.070345 2012-03-07 00:00:00+00:00 0.290614 2012-03-08 00:00:00+00:00 0.980420 2012-03-09 00:00:00+00:00 0.984008 2012-03-10 00:00:00+00:00 0.641380 Freq: D, dtype: float64
In [ ]:ts_utc.tz_convert("US/Eastern")
2012-03-05 19:00:00-05:00 0.070345 2012-03-06 19:00:00-05:00 0.290614 2012-03-07 19:00:00-05:00 0.980420 2012-03-08 19:00:00-05:00 0.984008 2012-03-09 19:00:00-05:00 0.641380 Freq: D, dtype: float64
In [ ]:rng
DatetimeIndex(['2012-03-06', '2012-03-07', '2012-03-08', '2012-03-09', '2012-03-10'], dtype='datetime64[ns]', freq='D')
In [ ]:rng + pd.offsets.BusinessDay(5)
DatetimeIndex(['2012-03-13', '2012-03-14', '2012-03-15', '2012-03-16', '2012-03-16'], dtype='datetime64[ns]', freq=None)
'코딩 공부 > Pandas' 카테고리의 다른 글
Pandas와 친해지기(10분 Pandas) (2024-02-07) (1) 2024.02.07 Pandas와 친해지기(10분 Pandas) (2024-02-06) (1) 2024.02.06 Pandas와 친해지기(10분 Pandas) (2024-02-05) (0) 2024.02.05 Pandas와 친해지기(10분 Pandas) (2024-02-04) (0) 2024.02.04 Pandas와 친해지기(10분 Pandas) (2024-01-26~2024-02-02) (0) 2024.02.03