iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 14
0

導讀

前言

今天是鐵人的第14天,持續Pandas,終於到Pandas的最後一天了,今天要來介紹Pandas中時間的處理

以下示範用to_datetime建立時間

import pandas as pd
ironman_date = pd.to_datetime('2018-10-11 22:30:00')
ironman_date
# 輸出結果
Timestamp('2018-10-11 22:30:00')

用ironman_date來建立連續5天的向量。其中的D代表天,還可以使用以下的編碼代替。
天(D)、年(Y)、月(M)、星期(w)、小時(h)、分(m)、秒(s)

ironman_date + pd.to_timedelta(np.arange(5), 'D') 
# 輸出結果
DatetimeIndex(['2018-10-11 22:30:00', '2018-10-12 22:30:00',
               '2018-10-13 22:30:00', '2018-10-14 22:30:00',
               '2018-10-15 22:30:00'],
              dtype='datetime64[ns]', freq=None)

範例:使用時間當作index

ironman_index = pd.DatetimeIndex(['2018-10-11','2018-10-12','2017-10-11','2017-10-12'])
ironman_data = pd.Series(np.arange(4), index = ironman_index)
ironman_data
# 輸出結果
2018-10-11    0
2018-10-12    1
2017-10-11    2
2017-10-12    3
dtype: int32

取得2018年的資料

ironman_data['2018']
# 輸出結果
2018-10-11    0
2018-10-12    1
dtype: int32

建立時間序列:date_range()、period_range()、timedelta_range()
時間序列也有類似數字的序列range()的函數-> pd.date_range(),同樣也是產生有規則的時間序列
freq可以使用->天(D)、年(A)、月(M)、星期(w)、小時(H)、分(T)、秒(S)

pd.date_range('2018-10-11', '2018-10-15')
pd.date_range('2018-10-11', periods=5, freq='D') #freq預設是D(也可以使用3小時20分->3H20T)
# 輸出結果 (上面兩個語法都是產生從'2018-10-11'開始5天的日期)
DatetimeIndex(['2018-10-11', '2018-10-12', '2018-10-13', '2018-10-14',
               '2018-10-15'],
              dtype='datetime64[ns]', freq='D')

高效率的Pandas:eval()、query()
使用eval()對於陣列的運算更有效率
示範:有用eval和沒有的差別

rng = np.random.RandomState(42)
df1, df2, df3, df4 = (pd.DataFrame(rng.rand(100000, 100)) for i in range(4))
%timeit df1+df2+df3+df4
%timeit pd.eval('df1+df2+df3+df4')
# 輸出結果(可以看到eval()比較快)
105 ms ± 12.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
77.8 ms ± 1.54 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

query()是等同於eval()的高效率運算
示範:有用query和沒有的差別

ironman_df = pd.DataFrame(rng.rand(100000, 3) , columns=['A','B','C'])
%timeit (ironman_df['A'] < ironman_df['B'])
%timeit ironman_df.query('A < B')
# 輸出結果(可以看到query()比較快)
324 µs ± 38.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
4.85 ms ± 509 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

上一篇
[Day13]Learning Pandas - 處理資料分組
下一篇
[Day15]視覺化資料 - Matplotlib - 折線圖、座標、直方圖、圓餅圖
系列文
python 入門到分析股市30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言