時序資料處理太難了,很多知識點沒有搞明白。先把自己理解清楚的內容記錄下。
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]
:0true
1false
2false
dtype:
bool
in [41]
: s.dt.is_year_end # 還可選 is_quarter/month_end
out[41]
:0false
1false
2false
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]
: sout[43]
:02020-01
-0120:
35:001
2020-01
-0121:
20:002
2020-01
-0122:
05:00dtype: datetime64[ns]
in [44]
: s.dt.
round
('1h'
)out[44]
:02020-01
-0121:
00:001
2020-01
-0121:
00:002
2020-01
-0122:
00:00dtype: datetime64[ns]
in [45]
: s.dt.ceil(
'1h'
)out[45]
:02020-01
-0121:
00:001
2020-01
-0122:
00:002
2020-01
-0123:
00:00dtype: datetime64[ns]
in [46]
: s.dt.floor(
'1h'
)out[46]
:02020-01
-0120:
00:001
2020-01
-0121:
00:002
2020-01
-0122:
00:00dtype: datetime64[ns]
參考資料: pandas學習 時序資料
三 時間差 四 日期偏置 五 時序中的滑窗與分組 概念單元素型別 陣列型別 pandas資料型別 date times timestamp datetimeindex datetime64 ns time deltas timedelta timedeltaindex timedelta64 ns ...
pandas時序資料 task4
這裡寫一點自己的理解吧,之前學習完材料後做了一些總結,但做練習題目時完全不會,目前想法是掌握了多少寫多少,這裡主要掌握了date range,to datetime.兩者的區別主要在days為單位時,如果原時間帶有夏令時間,那麼絕對時間的一天,是24小時,而相對時間的一天,則有可能不等於24小時,為...
Pandas資料分析學習打卡(四) 時序資料
主要內容 時序資料,我的理解就是直接以時間為索引的序列,同時對時間資訊有多種方法來實現對資料的靈活操作。時間序列的建立有多種方式,可以用to datetime方法和date range方法來實現。時間序列支援索引和切片操作 rng pd.date range 2020 2021 freq w ts ...