pandas學習之時序資料
技術標籤:python
感想
時序資料處理太難了,很多知識點沒有搞明白。先把自己理解清楚的內容記錄下。
1、首先需要知道,時間變數在python系統中是以時間戳型別儲存的,由日期和時間共同組成,即Timestamp,精確到ns。
2、date_range 是一種生成連續間隔時間的一種方法,其重要的引數為 start, end, freq, periods ,它們分別表示開始時間,結束時間,時間間隔,時間戳個數。
這裡重點說明下,freq和periods 的區別:
freq:是在時間間隔後找不到該日期,會捨棄不填充資料;呈現格式是依據freq的內容,若freq是時間間隔,則日期+時間格式;若是日期間隔,則是日期格式
pd.date_range('2020-1-1', '2020-2-28', periods=6)
結果:DatetimeIndex(['2020-01-01 00:00:00', '2020-01-12 14:24:00',
'2020-01-24 04:48:00', '2020-02-04 19:12:00',
'2020-02-16 09:36:00', '2020-02-28 00:00:00'],
dtype='datetime64[ns]', freq= None)
pd.date_range('2020-1-1', '2020-2-28', freq='10D')
結果:
DatetimeIndex(['2020-01-01', '2020-01-11', '2020-01-21', '2020-01-31',
'2020-02-10', '2020-02-20'],
dtype='datetime64[ns]', freq='10D')
pd.date_range('2020-1-1', '2020-2-28', freq='30s')
結果:
DatetimeIndex(['2020-01-01 00:00:00', '2020-01-01 00:00:30',
'2020-01-01 00:01:00' , '2020-01-01 00:01:30',
'2020-01-01 00:02:00', '2020-01-01 00:02:30',
'2020-01-01 00:03:00', '2020-01-01 00:03:30',
'2020-01-01 00:04:00', '2020-01-01 00:04:30',
...
'2020-02-27 23:55:30', '2020-02-27 23:56:00',
'2020-02-27 23:56:30', '2020-02-27 23:57:00',
'2020-02-27 23:57:30', '2020-02-27 23:58:00',
'2020-02-27 23:58:30', '2020-02-27 23:59:00',
'2020-02-27 23:59:30', '2020-02-28 00:00:00'],
dtype='datetime64[ns]', length=167041, freq='30S')
3、freq選項內容解讀:
4、Timedelta的使用
我們知道Excel表中,整數表示日期,小數表示時間。那如果讀取的excel檔案時日期資料顯示數字而非正確的日期,這種問題如何解決?那以下程式碼可以解決:
# 44196:在excel表示2020-12-31
pd.Timestamp('18991230')+pd.Timedelta(days=44196)
結果:
Timestamp('2020-12-31 00:00:00')
5、dt物件
①、取出時間相關的屬性
第一類操作的常用屬性包括: date, time, year, month, day, hour, minute, second, microsecond, nanosecond, dayofweek, dayofyear, weekofyear, daysinmonth, quarter ,其中 daysinmonth, quarter 分別表示月中的第幾天和季度。
s = pd.Series(pd.date_range('2020-1-1','2020-1-3', freq='60s'))
#date:獲取日期
s.dt.date
#month:獲取月份
s.dt.month
第二類判斷操作主要用於測試是否為月/季/年的第一天或者最後一天
In [40]: s.dt.is_year_start # 還可選 is_quarter/month_start
Out[40]:
0 True
1 False
2 False
dtype: bool
In [41]: s.dt.is_year_end # 還可選 is_quarter/month_end
Out[41]:
0 False
1 False
2 False
dtype: bool
第三類的取整操作包含 round, ceil, floor ,它們的公共引數為 freq ,常用的包括 H, min, S (小時、分鐘、秒)
In [42]: s = pd.Series(pd.date_range('2020-1-1 20:35:00',
....: '2020-1-1 22:35:00',
....: freq='45min'))
....:
In [43]: s
Out[43]:
0 2020-01-01 20:35:00
1 2020-01-01 21:20:00
2 2020-01-01 22:05:00
dtype: datetime64[ns]
In [44]: s.dt.round('1H')
Out[44]:
0 2020-01-01 21:00:00
1 2020-01-01 21:00:00
2 2020-01-01 22:00:00
dtype: datetime64[ns]
In [45]: s.dt.ceil('1H')
Out[45]:
0 2020-01-01 21:00:00
1 2020-01-01 22:00:00
2 2020-01-01 23:00:00
dtype: datetime64[ns]
In [46]: s.dt.floor('1H')
Out[46]:
0 2020-01-01 20:00:00
1 2020-01-01 21:00:00
2 2020-01-01 22:00:00
dtype: datetime64[ns]
參考資料:https://datawhalechina.github.io/joyful-pandas/build/html/%E7%9B%AE%E5%BD%95/ch10.html