主要內容:時序資料,我的理解就是直接以時間為索引的序列,同時對時間資訊有多種方法來實現對資料的靈活操作。
時間序列的建立有多種方式,可以用to_datetime方法和date_range方法來實現。
時間序列支援索引和切片操作
rng = pd.date_range(
'2020'
,'2021'
, freq=
'w')
ts = pd.series(np.random.randn(
len(rng)
), index=rng)
ts['2020-01-26'
]# 混合形態的索引
ts['2020-01-26'
:'20200726'
]
採用dt物件可以輕鬆獲得關於時間的資訊,利用strftime可重新修改時間格式,對於datetime物件可以直接通過屬性獲取資訊。
對時序資料的操作中存在著類似groupby的分組操作,也就是所謂重取樣,指的resample函式。取樣之後必須配合其它方法比如sum、mean等,不然返回的只是個內部位址。取樣組可以迭代,取樣組的迭代和groupby迭代完全類似,對於每乙個組都可以分別做相應操作。
最後是視窗函式,主要是rolling和expanding,它們的作用是規定乙個視窗,然後配合聚合函式來使用。主要的引數是window和min_periods,前者指定視窗寬度,後者是指需要的非缺失資料點數量閥值。
問題與練習
【問題一】如何對date_range進行批量加幀操作或對某一時間段加大時間戳密度?
我對加幀的理解是在兩行時序資料之間插入新資料,不知道這樣對不對:
import pandas as pd
import numpy as np
rng = pd.date_range(start=
'2020/1/1'
, end=
'2020/1/10'
, periods=3)
ts = pd.series(np.random.randn(3)
, index=rng)
for i in
range(0
,len
(ts)-1
):irng = pd.date_range(start=ts.index[i]
, end=ts.index[i+1]
, periods=5)
its = pd.series(np.random.randn(
len(irng)
), index=irng)
dict
(zip
([its.index.astype(
'str')[
1:(len
(its)-1
)]], its[1:
(len
(its)-1
)]))
, ignore_index=
true
)print
(ts.index(
))
【問題二】如何批量增加timestamp的精度?
import pandas as pd
pd.timestamp(
'2020-01-01'
)+ pd.offset.second(
0)
【問題三】對於超出處理時間的時間點,是否真的完全沒有處理方法?
可以將超出處理時間的時間點減去最大時間,將差值記錄下來儲存到值中。
【問題四】給定一組非連續的日期,怎麼快速找出位於其最大日期和最小日期之間,且沒有出現在該組日期中的日期?
import pandas as pd
rng = pd.date_range(start=
'2020/1/1'
, end=
'2020/1/10'
, periods=2)
rng_all = pd.date_range(start=
'2020/1/1'
, end=
'2020/1/10'
, periods=4)
print
(rng_all[
~rng_all.isin(rng)
])
Python資料分析 Pandas學習
dataframe是乙個類似於 的資料型別,如圖 data 方框內的資料 numpy ndarray structured or homogeneous dict,or dataframe index 行索引索引 index or array like columns 列索引 index or ar...
資料分析 pandas
pandas是乙個強大的python資料分析的工具包,它是基於numpy構建的,正因pandas的出現,讓python語言也成為使用最廣泛而且強大的資料分析環境之一。pandas的主要功能 具備對其功能的資料結構dataframe,series 整合時間序列功能 提供豐富的數 算和操作 靈活處理缺失...
資料分析學習 使用Pandas進行資料分析
在對資料進行分析時,首先需要了解相關的名詞在該行業裡的含義,即查閱相關知識對題目進行整體把握。下面是進行資料分析的步驟 1 讀取資料 import pandas as pd data pd.read csv data train.csv 2 對資料進行預處理 具體包括 1 剔除空白值超過一半的列 h...