Pandas 處理時(shí)間戳索引

1扬卷、對時(shí)間序列的處理:
In [193]: from datetime import datetime

In [194]: dates = [
     ...:     datetime(2000, 1, 1),
     ...:     datetime(2000, 1, 2),
     ...:     datetime(2000, 1, 3)
     ...: ]

In [195]: dates      # datetime 列表
Out[195]: 
[datetime.datetime(2000, 1, 1, 0, 0),
 datetime.datetime(2000, 1, 2, 0, 0),
 datetime.datetime(2000, 1, 3, 0, 0)]

In [196]: s = Series(np.random.randn(3), index=dates)

In [197]: s          # 時(shí)間戳作為索引的一維數(shù)組
Out[197]: 
2000-01-01    0.536546
2000-01-02    0.226604
2000-01-03    0.487324
dtype: float64

In [198]: s.index    # 時(shí)間戳索引
Out[198]: DatetimeIndex(['2000-01-01', '2000-01-02', '2000-01-03'], 
dtype='datetime64[ns]', freq=None)

In [199]: s.index[0] # 時(shí)間戳( datetime 數(shù)據(jù)類型作索引后扩然,自動(dòng)轉(zhuǎn)換為時(shí)間戳類型 )
Out[199]: Timestamp('2000-01-01 00:00:00')
2掸犬、pandas 的 Timestamp 方法生成時(shí)間戳:
In [64]: pd.Timestamp('2011/1/1')
Out[64]: Timestamp('2011-01-01 00:00:00')

In [65]: pd.Timestamp('2011-1-1')
Out[65]: Timestamp('2011-01-01 00:00:00')

In [66]: pd.Timestamp(2012,1,2)
Out[66]: Timestamp('2012-01-02 00:00:00')

In [67]: pd.Timestamp('1999-2-2 11:22:33')
Out[67]: Timestamp('1999-02-02 11:22:33')
3珊楼、pandas 的 to_datetime 方法生成時(shí)間戳索引:
# 格式很靈活
In [74]: pd.to_datetime(['1999/1/1', '1999-2-2', '2222-3-4 12:34:56'])
Out[74]: 
DatetimeIndex(['1999-01-01 00:00:00', '1999-02-02 00:00:00',
               '2222-03-04 12:34:56'],
              dtype='datetime64[ns]', freq=None)

In [75]: pd.to_datetime(['Dec 23, 2011', '1-2-1999', None])
Out[75]: DatetimeIndex(['2011-12-23', '1999-01-02', 'NaT'], 
dtype='datetime64[ns]', freq=None)

# 這是歐洲風(fēng)格通殃,把第一個(gè)數(shù)當(dāng)作日,第二個(gè)數(shù)當(dāng)作月
In [76]: pd.to_datetime(['1-2-1999'], dayfirst=True)  
Out[76]: DatetimeIndex(['1999-02-01'], dtype='datetime64[ns]', freq=None)

# pd.to_datetime(Series/DataFrame) 返回值是 Series 數(shù)據(jù)類型厕宗,不是時(shí)間戳索引
# 注意画舌,這個(gè)返回值的每個(gè)元素的數(shù)據(jù)類型仍然是 Timestamp
In [96]: s = Series(['2011', '2012-3-4'])

In [97]: pd.to_datetime(s)
Out[97]: 
0   2011-01-01
1   2012-03-04
dtype: datetime64[ns]

# year month day 這三項(xiàng)必須有
In [98]: df = DataFrame({
     ...:    'year': [2011, 1987],
     ...:    'month': [1, 2],
     ...:    'day': [3, 4],
     ...:    'hour': [5, 6]
     ...: })

In [99]: pd.to_datetime(df)
Out[99]: 
0   2011-01-03 05:00:00
1   1987-02-04 06:00:00
dtype: datetime64[ns]

In [100]: type(pd.to_datetime(df))
Out[100]: pandas.core.series.Series

In [125]: type(pd.to_datetime(df)[0])
Out[125]: pandas._libs.tslibs.timestamps.Timestamp
4、pandas 的 date_range 方法生成時(shí)間戳索引:
# 三個(gè)參數(shù)依次為:開始時(shí)間已慢、結(jié)束時(shí)間曲聂、頻率,默認(rèn)時(shí)間戳?xí)r刻為每月最后一天零時(shí)零分零秒
# Q 表示每季度蛇受,M 表示每月句葵,D 表示每天厕鹃,H 表示每小時(shí)兢仰,T/MIN 表示每分鐘乍丈,S 表示每秒
# MS 表示每月第一天,BM 表示每月最后一天
# 5M 表示 5 個(gè)月把将,1h30min 表示 1 小時(shí) 30 分鐘
# 第三個(gè)參數(shù) freq 可以不寫轻专,默認(rèn)頻率是 D
In [201]: pd.date_range('1999-1-1', '2000', freq='M')
Out[201]: 
DatetimeIndex(['1999-01-31', '1999-02-28', '1999-03-31', '1999-04-30',
               '1999-05-31', '1999-06-30', '1999-07-31', '1999-08-31',
               '1999-09-30', '1999-10-31', '1999-11-30', '1999-12-31'],
              dtype='datetime64[ns]', freq='M')

In [202]: pd.date_range('1999-1-1', '2000', freq='MS')
Out[202]: 
DatetimeIndex(['1999-01-01', '1999-02-01', '1999-03-01', '1999-04-01',
               '1999-05-01', '1999-06-01', '1999-07-01', '1999-08-01',
               '1999-09-01', '1999-10-01', '1999-11-01', '1999-12-01',
               '2000-01-01'],
              dtype='datetime64[ns]', freq='MS')

# 兩個(gè)參數(shù)為:開始時(shí)間、數(shù)量
# periods 表示生成多少個(gè)時(shí)間戳察蹲,默認(rèn)頻率為 D
In [226]: pd.date_range('1999.11.1', periods=3)
Out[226]: DatetimeIndex(['1999-11-01', '1999-11-02', '1999-11-03'], 
dtype='datetime64[ns]', freq='D')

# 三個(gè)參數(shù)依次為:開始時(shí)間请垛、數(shù)量、頻率
In [227]: pd.date_range('1999.11.1', periods=3, freq='M')
Out[227]: DatetimeIndex(['1999-11-30', '1999-12-31', '2000-01-31'], 
dtype='datetime64[ns]', freq='M')
5洽议、時(shí)間戳作為索引的 Series 數(shù)組用 resample 方法統(tǒng)計(jì)數(shù)據(jù)

resample 就是“重采樣”的意思

In [229]: dates = pd.date_range('1999.11.1', periods=9, freq='10D')

In [230]: s = Series(np.arange(1, len(dates)+1), index=dates)

In [231]: s
Out[231]: 
1999-11-01    1
1999-11-11    2
1999-11-21    3
1999-12-01    4
1999-12-11    5
1999-12-21    6
1999-12-31    7
2000-01-10    8
2000-01-20    9
Freq: 10D, dtype: int64

In [232]: s.resample('M').sum()    # 按月重采樣求和
Out[232]: 
1999-11-30     6
1999-12-31    22
2000-01-31    17
Freq: M, dtype: int64

In [234]: s.resample('M').mean()   # 按月重采樣求平均值
Out[234]: 
1999-11-30    2.0
1999-12-31    5.5
2000-01-31    8.5
Freq: M, dtype: float64

# 按月重采樣求平均值后再按天重采樣求平均值
In [235]: s.resample('M').mean().resample('D').mean()
Out[235]: 
1999-11-30    2.0
1999-12-01    NaN
1999-12-02    NaN
1999-12-03    NaN
        ...
2000-01-29    NaN
2000-01-30    NaN
2000-01-31    8.5
Freq: D, Length: 63, dtype: float64

# 同上操作用 ffill 處理缺失值 NaN
In [236]: s.resample('M').mean().resample('D').mean().ffill()
Out[236]: 
1999-11-30    2.0
1999-12-01    2.0
1999-12-02    2.0
        ...
2000-01-29    5.5
2000-01-30    5.5
2000-01-31    8.5
Freq: D, Length: 63, dtype: float64

In [269]: s
Out[269]: 
2011-01-01    0
2011-01-11    1
2011-01-21    2
2011-01-31    3
2011-02-10    4
2011-02-20    5
2011-03-02    6
2011-03-12    7
2011-03-22    8
2011-04-01    9
Freq: 10D, dtype: int64

# 按照月份進(jìn)行降采樣宗收,并將每月的數(shù)據(jù)的原值、最大值亚兄、最小值混稽、以及臨近值列出
# ohlc:open high low close
In [270]: s.resample('m').ohlc()
Out[270]: 
            open  high  low  close
2011-01-31     0     3    0      3
2011-02-28     4     5    4      5
2011-03-31     6     8    6      8
2011-04-30     9     9    9      9
6、與時(shí)間戳對應(yīng)的時(shí)間間隔和時(shí)間間隔索引审胚,時(shí)間間隔就是時(shí)間段匈勋,使用 pd.Periodpd.period_range 方法:
# 生成時(shí)間間隔
In [45]: pd.Period('2011')
Out[45]: Period('2011', 'A-DEC')

In [46]: pd.Period('2011-1')
Out[46]: Period('2011-01', 'M')

# 生成時(shí)間間隔索引,參數(shù)與 date_range 類似
In [47]: pd.period_range('2011', '2012', freq='m')
Out[47]: 
PeriodIndex(['2011-01', '2011-02', '2011-03', '2011-04', '2011-05', 
             '2011-06', '2011-07', '2011-08', '2011-09', '2011-10', 
             '2011-11', '2011-12', '2012-01'],
            dtype='period[M]', freq='M')

In [65]: pd.period_range('2011-11', periods=10, freq='M')
Out[65]: 
PeriodIndex(['2011-11', '2011-12', '2012-01', '2012-02', '2012-03', 
             '2012-04', '2012-05', '2012-06', '2012-07', '2012-08'],
            dtype='period[M]', freq='M')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膳叨,一起剝皮案震驚了整個(gè)濱河市洽洁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌菲嘴,老刑警劉巖饿自,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異龄坪,居然都是意外死亡昭雌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門悉默,熙熙樓的掌柜王于貴愁眉苦臉地迎上來城豁,“玉大人,你說我怎么就攤上這事抄课〕牵” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵跟磨,是天一觀的道長间聊。 經(jīng)常有香客問我,道長抵拘,這世上最難降的妖魔是什么哎榴? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上尚蝌,老公的妹妹穿的比我還像新娘迎变。我一直安慰自己,他們只是感情好飘言,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布衣形。 她就那樣靜靜地躺著,像睡著了一般姿鸿。 火紅的嫁衣襯著肌膚如雪谆吴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天苛预,我揣著相機(jī)與錄音句狼,去河邊找鬼。 笑死热某,一個(gè)胖子當(dāng)著我的面吹牛腻菇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苫拍,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼芜繁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绒极?” 一聲冷哼從身側(cè)響起骏令,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎垄提,沒想到半個(gè)月后榔袋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铡俐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年凰兑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片审丘。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吏够,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滩报,到底是詐尸還是另有隱情锅知,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布脓钾,位于F島的核電站售睹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏可训。R本人自食惡果不足惜昌妹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一捶枢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧飞崖,春花似錦烂叔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畜眨。三九已至昼牛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間康聂,已是汗流浹背贰健。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恬汁,地道東北人伶椿。 一個(gè)月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像氓侧,于是被迫代替她去往敵國和親脊另。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容