練習(xí)書8-《python數(shù)據(jù)科學(xué)手冊》

pandas的向量化字符串和時(shí)間序列處理参萄。

代碼

import numpy as np
import pandas as pd
import time
from datetime import datetime
import matplotlib as mpl
import matplotlib.pyplot as plt
from dateutil import parser
from pandas.tseries.offsets import BDay

# plt.style.use('classic')
plt.style.use('seaborn-whitegrid')
np.random.seed(0)
# 配置pandas顯示
pd.set_option('display.max_rows', 10)
pd.set_option('display.max_columns', 10)

# 向量化字符串操作(vectorized string operation)
data = ['peter', 'Paul', None, 'MARY', 'gUIDO']
# print([s.capitalize() for s in data])
names = pd.Series(data)
print(names)
print(names.str.capitalize())

monte = pd.Series(['Graham Chapman', 'John Cleese', 'Terry Gilliam', 'Eric Idle',
                   'Terry Jones', 'Michael Palin'])
print(monte.str.lower())
print(monte.str.len())
print(monte.str.startswith('T'))
print(monte.str.split())
print(monte.str.extract('([A-Za-z]+)'))
print(monte.str.findall(r'^[^AEIOU].*[^aeiou]$'))
print(monte.str[0:3])
print(monte.str.split().str.get(-1))
full_monte = pd.DataFrame({'name': monte,
                           'info': ['B|C|D', 'B|D', 'A|C', 'B|D', 'B|C',
                                    'B|C|D']})
print(full_monte)

print(full_monte['info'].str.get_dummies('|'))
# 處理時(shí)間序列

print(datetime(year=2015, month=7, day=4))
date = parser.parse("4th of July, 2015")
print(date)
print(date.strftime('%A'))

date = np.array('2015-07-04', dtype=np.datetime64)
print(date)
print(date + np.arange(12))
print(np.datetime64('2015-07-04 12:00'))

date = pd.to_datetime('4th of July, 2015')
print(date)
print(date.strftime('%A'))
print(date + pd.to_timedelta(np.arange(12), 'D'))

index = pd.DatetimeIndex(['2014-07-04', '2014-08-04',
                          '2015-07-04', '2015-08-04'])
data = pd.Series([0, 1, 2, 3], index=index)
print(data)
print(data['2014-07-04': '2015-07-04'])
print(data['2015'])

# ? 針對時(shí)間戳數(shù)據(jù)翘魄,Pandas 提供了Timestamp 類型典蜕。與前面介紹的一樣笤喳,它本質(zhì)上是 Python 的原生 datetime 類型的替代品间校,
# 但是在性能更好的 numpy.datetime64 類型的基 礎(chǔ)上創(chuàng)建勺疼。對應(yīng)的索引數(shù)據(jù)結(jié)構(gòu)是 DatetimeIndex教寂。
# ? 針對時(shí)間周期數(shù)據(jù),Pandas 提供了 Period 類型执庐。這是利用 numpy.datetime64 類型將固 定頻率的時(shí)間間隔進(jìn)行編碼酪耕。
# 對應(yīng)的索引數(shù)據(jù)結(jié)構(gòu)是 PeriodIndex。
# ? 針對時(shí)間增量或持續(xù)時(shí)間轨淌,Pandas 提供了 Timedelta 類型迂烁。Timedelta 是一種代替 Python 原生 datetime.timedelta 類型的高性能數(shù)據(jù)結(jié)構(gòu),
# 同樣是基于 numpy.timedelta64 類型递鹉。 對應(yīng)的索引數(shù)據(jù)結(jié)構(gòu)是 TimedeltaIndex盟步。

dates = pd.to_datetime([datetime(2015, 7, 3), '4th of July, 2015',
                        '2015-Jul-6', '07-07-2015', '20150708'])
print(dates)
print(dates.to_period('D'))
print(dates - dates[0])

# pd.date_range()可以處理時(shí)間戳、pd.period_range()可以處理周期躏结、pd.timedelta_range()可以處理時(shí)間間隔却盘。
# 我們已經(jīng)介紹過,Python的range() 和 NumPy的np.arange()可以用起點(diǎn)媳拴、終點(diǎn)和步長(可選的)創(chuàng)建一個(gè)序列黄橘。
print(pd.date_range('2015-07-03', '2015-07-10'))
print(pd.date_range('2015-07-03', periods=8))
print(pd.date_range('2015-07-03', periods=8, freq='H'))

print(pd.period_range('2015-07', periods=8, freq='M'))
print(pd.timedelta_range(0, periods=10, freq='H'))
print(pd.timedelta_range(0, periods=9, freq='2H30T'))
print(pd.date_range('2015-07-01', periods=5, freq=BDay()))
# 處理時(shí)間序列數(shù)據(jù)時(shí),經(jīng)常需要按照新的頻率(更高頻率禀挫、更低頻率)對數(shù)據(jù)進(jìn)行重新取樣旬陡。
# 你可以通過resample()方法解決這個(gè)問題,或者用更簡單的asfreq()方法语婴。
# 這兩個(gè)方法的主要差異在于描孟,resample()方法是以數(shù)據(jù)累計(jì)(data aggregation)為基礎(chǔ),
# 而 asfreq()方法是以數(shù)據(jù)選擇(data selection)為基礎(chǔ)砰左。

輸出

0    peter
1     Paul
2     None
3     MARY
4    gUIDO
dtype: object
0    Peter
1     Paul
2     None
3     Mary
4    Guido
dtype: object
0    graham chapman
1       john cleese
2     terry gilliam
3         eric idle
4       terry jones
5     michael palin
dtype: object
0    14
1    11
2    13
3     9
4    11
5    13
dtype: int64
0    False
1    False
2     True
3    False
4     True
5    False
dtype: bool
0    [Graham, Chapman]
1       [John, Cleese]
2     [Terry, Gilliam]
3         [Eric, Idle]
4       [Terry, Jones]
5     [Michael, Palin]
dtype: object
         0
0   Graham
1     John
2    Terry
3     Eric
4    Terry
5  Michael
0    [Graham Chapman]
1                  []
2     [Terry Gilliam]
3                  []
4       [Terry Jones]
5     [Michael Palin]
dtype: object
0    Gra
1    Joh
2    Ter
3    Eri
4    Ter
5    Mic
dtype: object
0    Chapman
1     Cleese
2    Gilliam
3       Idle
4      Jones
5      Palin
dtype: object
             name   info
0  Graham Chapman  B|C|D
1     John Cleese    B|D
2   Terry Gilliam    A|C
3       Eric Idle    B|D
4     Terry Jones    B|C
5   Michael Palin  B|C|D
   A  B  C  D
0  0  1  1  1
1  0  1  0  1
2  1  0  1  0
3  0  1  0  1
4  0  1  1  0
5  0  1  1  1
2015-07-04 00:00:00
2015-07-04 00:00:00
Saturday
2015-07-04
['2015-07-04' '2015-07-05' '2015-07-06' '2015-07-07' '2015-07-08'
 '2015-07-09' '2015-07-10' '2015-07-11' '2015-07-12' '2015-07-13'
 '2015-07-14' '2015-07-15']
2015-07-04T12:00
2015-07-04 00:00:00
Saturday
DatetimeIndex(['2015-07-04', '2015-07-05', '2015-07-06', '2015-07-07',
               '2015-07-08', '2015-07-09', '2015-07-10', '2015-07-11',
               '2015-07-12', '2015-07-13', '2015-07-14', '2015-07-15'],
              dtype='datetime64[ns]', freq=None)
2014-07-04    0
2014-08-04    1
2015-07-04    2
2015-08-04    3
dtype: int64
2014-07-04    0
2014-08-04    1
2015-07-04    2
dtype: int64
2015-07-04    2
2015-08-04    3
dtype: int64
DatetimeIndex(['2015-07-03', '2015-07-04', '2015-07-06', '2015-07-07',
               '2015-07-08'],
              dtype='datetime64[ns]', freq=None)
PeriodIndex(['2015-07-03', '2015-07-04', '2015-07-06', '2015-07-07',
             '2015-07-08'],
            dtype='period[D]', freq='D')
TimedeltaIndex(['0 days', '1 days', '3 days', '4 days', '5 days'], dtype='timedelta64[ns]', freq=None)
DatetimeIndex(['2015-07-03', '2015-07-04', '2015-07-05', '2015-07-06',
               '2015-07-07', '2015-07-08', '2015-07-09', '2015-07-10'],
              dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2015-07-03', '2015-07-04', '2015-07-05', '2015-07-06',
               '2015-07-07', '2015-07-08', '2015-07-09', '2015-07-10'],
              dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2015-07-03 00:00:00', '2015-07-03 01:00:00',
               '2015-07-03 02:00:00', '2015-07-03 03:00:00',
               '2015-07-03 04:00:00', '2015-07-03 05:00:00',
               '2015-07-03 06:00:00', '2015-07-03 07:00:00'],
              dtype='datetime64[ns]', freq='H')
PeriodIndex(['2015-07', '2015-08', '2015-09', '2015-10', '2015-11', '2015-12',
             '2016-01', '2016-02'],
            dtype='period[M]', freq='M')
TimedeltaIndex(['0 days 00:00:00', '0 days 01:00:00', '0 days 02:00:00',
                '0 days 03:00:00', '0 days 04:00:00', '0 days 05:00:00',
                '0 days 06:00:00', '0 days 07:00:00', '0 days 08:00:00',
                '0 days 09:00:00'],
               dtype='timedelta64[ns]', freq='H')
TimedeltaIndex(['0 days 00:00:00', '0 days 02:30:00', '0 days 05:00:00',
                '0 days 07:30:00', '0 days 10:00:00', '0 days 12:30:00',
                '0 days 15:00:00', '0 days 17:30:00', '0 days 20:00:00'],
               dtype='timedelta64[ns]', freq='150T')
DatetimeIndex(['2015-07-01', '2015-07-02', '2015-07-03', '2015-07-06',
               '2015-07-07'],
              dtype='datetime64[ns]', freq='B')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匿醒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子缠导,更是在濱河造成了極大的恐慌廉羔,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僻造,死亡現(xiàn)場離奇詭異憋他,居然都是意外死亡孩饼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門竹挡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镀娶,“玉大人,你說我怎么就攤上這事揪罕√萋耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵好啰,是天一觀的道長轩娶。 經(jīng)常有香客問我,道長框往,這世上最難降的妖魔是什么鳄抒? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮搅窿,結(jié)果婚禮上嘁酿,老公的妹妹穿的比我還像新娘。我一直安慰自己男应,他們只是感情好闹司,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沐飘,像睡著了一般游桩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耐朴,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天借卧,我揣著相機(jī)與錄音,去河邊找鬼筛峭。 笑死铐刘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的影晓。 我是一名探鬼主播镰吵,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挂签!你這毒婦竟也來了疤祭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤饵婆,失蹤者是張志新(化名)和其女友劉穎勺馆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡草穆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年灌灾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片续挟。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡紧卒,死狀恐怖侥衬,靈堂內(nèi)的尸體忽然破棺而出诗祸,到底是詐尸還是另有隱情,我是刑警寧澤轴总,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布直颅,位于F島的核電站,受9級特大地震影響怀樟,放射性物質(zhì)發(fā)生泄漏功偿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一往堡、第九天 我趴在偏房一處隱蔽的房頂上張望械荷。 院中可真熱鬧,春花似錦虑灰、人聲如沸吨瞎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颤诀。三九已至,卻和暖如春对湃,著一層夾襖步出監(jiān)牢的瞬間崖叫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工拍柒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留心傀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓拆讯,卻偏偏與公主長得像脂男,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子往果,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356