Pandas 數(shù)據(jù)處理 | 關(guān)于時間模塊的一些用法
Datatime 是 Python 中一種時間數(shù)據(jù)類型,對于時間格式轉(zhuǎn)換轰坊、存儲是相當方便的铸董,而在 Pandas 中也同樣支持 DataTime 數(shù)據(jù)機制,可以借助它實現(xiàn)許多有用的功能肴沫,例如
1粟害,函數(shù)to_datetime() 將數(shù)據(jù)列表中的 Series 列轉(zhuǎn)化為 datetime 類型,
#Convert the type to datetime
apple.Date = pd.to_datetime(apple.Date)
apple['Date'].head()
#
0 2014-07-08
1 2014-07-07
2 2014-07-03
3 2014-07-02
4 2014-07-01
Name: Date, dtype: datetime64[ns]
2颤芬,DataFrame.resample(freq)悲幅,將數(shù)據(jù)基于時間列以 freq 作為頻度對全局數(shù)據(jù)做重采樣,計算出分段數(shù)據(jù)和站蝠、均值汰具、方差等指標;下面例子中原數(shù)據(jù)的索引是 Datatime 數(shù)據(jù)格式菱魔,以月為時間單位求出各列數(shù)據(jù)的平均值
# Resample the data based the offset,get the mean of data
# BM — bussiness month end frequency
apple_month = apple.resample("BM").mean()
apple_month.head()
下面將根據(jù)幾道練習題郁副,簡單介紹一下 Pandas 是怎么處理 DataFrame 數(shù)據(jù)的
1 , to_datetime() 與 resample() 操作
1.1,讀取數(shù)據(jù)
url = "https://raw.githubusercontent.com/guipsamora/pandas_exercises/master/09_Time_Series/Apple_Stock/appl_1980_2014.csv"
apple =pd.read_csv(url)
apple.head()
可以看到豌习,時間在 Date 這一列數(shù)據(jù)中存谎,但不是標準的 datetime 格式,需要格式處理一下
1.2肥隆,datetime 格式轉(zhuǎn)換
#Convert the type to datetime
apple.Date = pd.to_datetime(apple.Date)
apple['Date'].head()
**1.3既荚,將 Date 列設(shè)為 index **
apple = apple.set_index("Date")
# Set Index
apple.head()
Date 雖然已經(jīng)設(shè)為 index,但是時間排列卻并不清晰栋艳,datetime 數(shù)據(jù)可以直接排序這里用 sort_index(ascending = True) 完成排序
1.4恰聘,對索引進行排序
# Sort The DataFrame based on Date columns
apple.sort_index(ascending = True).head()
1.5,以月為單位對數(shù)據(jù)采樣并獲取mean()
# Resample the data based the offset,get the mean of data
# BM — bussiness month end frequency
apple_month = apple.resample("BM").mean()
apple_month.head()
BM 全稱 Bussiness Month吸占,是商業(yè)月的意思晴叨,在 Pandas 中稱為 DataOffset,除了月之外矾屯,還提供年兼蕊、日、秒件蚕、小時孙技、分..等作為采樣單位,當然也可以自定義
關(guān)于 Data Offset 具體詳細內(nèi)容可參考:https://pandas.pydata.org/docs/user_guide/timeseries.html#timeseries-offset-aliases排作;
1.6牵啦,計算時間列表中最早日期與最晚日期相差天數(shù)
(apple.index.max()-apple.index.min()).days
#
12261
2,統(tǒng)計近兩年蘋果妄痪、特斯拉哈雏、IBM、LINKD各公司股價
2.1,pandas_datareader 獲取數(shù)據(jù)
import pandas as pd
from pandas_datareader import data as web
import datetime as dt
start = dt.datetime(2019,1,1)
end = dt.datetime.today()
stocks = ['APPLE','TSLA','IBM','LNKD']
df = web.DataReader(stocks,'yahoo',start,end)
df
使用之前請確保pandas_datareader 包已經(jīng)安裝成功裳瘪,這個包幫助我們直接通過爬蟲獲取近兩年的各公司的股票信息履因,后面 start,end 兩個 datetime 時間用于限制時間
結(jié)果顯示似乎這種方法獲取不到到的蘋果和LINKD 的股價(但并不影響盹愚,因為這里主要是學習一下 datetime 在 Pandas 的用法)
2.2栅迄,獲取 股票 數(shù)據(jù)
vol = df['Volume']
vol
**2.3,創(chuàng)建新列皆怕,表示 week毅舆、year **
后面做聚類分析,聚類基準選擇的是 week愈腾、year , 因此需要提前創(chuàng)建好兩列(week憋活,year)數(shù)據(jù)
vol['week'] = vol.index.week
vol['year'] = vol.index.year
vol.head()
2.4,groupby 聚類分組(先 week ,后 year)
week = vol.groupby(['week','year']).sum()
week.head()
這樣就可以很清晰地比對虱黄,2019-2020年對于每一周來說各公司股票的總值變化啦
好了悦即,以上就是本篇文章的所有內(nèi)容啦;最后橱乱,感謝大家的閱讀辜梳!
Reference:
1,https://pandas.pydata.org/docs/user_guide/timeseries.html#timeseries-offset-aliases
2,https://github.com/guipsamora/pandas_exercises/blob/master/09_Time_Series/Getting_Financial_Data