1. 程式人生 > 其它 >pandas學習之時序資料

pandas學習之時序資料

技術標籤:python

感想

時序資料處理太難了,很多知識點沒有搞明白。先把自己理解清楚的內容記錄下。
1、首先需要知道,時間變數在python系統中是以時間戳型別儲存的,由日期和時間共同組成,即Timestamp,精確到ns。
2、date_range 是一種生成連續間隔時間的一種方法,其重要的引數為 start, end, freq, periods ,它們分別表示開始時間,結束時間,時間間隔,時間戳個數。
這裡重點說明下,freq和periods 的區別:
freq:是在時間間隔後找不到該日期,會捨棄不填充資料;呈現格式是依據freq的內容,若freq是時間間隔,則日期+時間格式;若是日期間隔,則是日期格式

periods:是最後一項若找不到該日期會用現有日期序列中的最後一個日期填充,比如例子中,用2020-2-28 填充。呈現格式是日期+時間格式

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