99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁大數(shù)據(jù)時(shí)代數(shù)據(jù)分析師教程《Python數(shù)據(jù)分析極簡入門》第3節(jié) 10 Pandas 時(shí)序數(shù)據(jù)
數(shù)據(jù)分析師教程《Python數(shù)據(jù)分析極簡入門》第3節(jié) 10 Pandas 時(shí)序數(shù)據(jù)
2023-11-30
收藏

《Python數(shù)據(jù)分析極簡入門》

第3節(jié) 10 Pandas 時(shí)序數(shù)據(jù)

在Pandas中,時(shí)間序列(Time Series)是一種特殊的數(shù)據(jù)類型,用于處理時(shí)間相關(guān)的數(shù)據(jù)。Pandas提供了豐富的功能和方法,方便對(duì)時(shí)間序列數(shù)據(jù)進(jìn)行處理和分析。下面是一些針對(duì)時(shí)間序列的常用操作:

創(chuàng)建時(shí)間序列數(shù)據(jù)

方式① 使用to_datetime創(chuàng)建時(shí)間序列:直接傳入列表即可

import pandas as pd

# 將列表轉(zhuǎn)換為時(shí)間戳
date_range = pd.to_datetime(['2024-01-01''2024-01-02''2024-01-03'])
date_range
DatetimeIndex(['2024-01-01', '2024-01-02', '2024-01-03'], dtype='datetime64[ns]', freq=None)

方式② 使用pd.date_range()創(chuàng)建一段連續(xù)的時(shí)間范圍:使用指定參數(shù)即可

import pandas as pd
date_range = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
date_range
DatetimeIndex(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04',
               '2024-01-05', '2024-01-06', '2024-01-07', '2024-01-08',
               '2024-01-09', '2024-01-10',
               ...
               '2024-12-22', '2024-12-23', '2024-12-24', '2024-12-25',
               '2024-12-26', '2024-12-27', '2024-12-28', '2024-12-29',
               '2024-12-30', '2024-12-31'],
              dtype='datetime64[ns]', length=366, freq='D')

其中,start是起始日期,end是結(jié)束日期,freq是頻率,這里設(shè)置為'D'表示每天。

方式③ 使用Timestamp()函數(shù)創(chuàng)建一個(gè)特定的時(shí)間戳:使用指定參數(shù)即可

import pandas as pd

timestamp = pd.Timestamp(year=2023, month=1, day=1, hour=12, minute=30, second=45)
timestamp
Timestamp('2023-01-01 12:30:45')

方式④ 使用 datetime 模塊創(chuàng)建時(shí)間戳:使用指定參數(shù)即可

import pandas as pd
from datetime import datetime

timestamp = datetime(202311123045)
print(timestamp)
2023-01-01 12:30:45

時(shí)長數(shù)據(jù)計(jì)算

計(jì)算一下兩個(gè)時(shí)間數(shù)據(jù)之差

import pandas as pd

# 創(chuàng)建兩個(gè)固定時(shí)間
start_time = pd.Timestamp('2024-01-01 12:00:00')
end_time = pd.Timestamp('2024-01-02 14:30:00')

# 計(jì)算時(shí)間差
time_diff = end_time - start_time
time_diff 
Timedelta('1 days 02:30:00')

一個(gè)固定時(shí)間加上pd.Timedelta類型的時(shí)間差

pd.Timestamp('2024-01-02 14:30:00')+pd.Timedelta('1 days 02:30:00')
Timestamp('2024-01-03 17:00:00')

時(shí)序索引

接下來,我們看看日期做索引的情況

將日期作為索引創(chuàng)建時(shí)間序列:

import pandas as pd
data = [12345]
dates = pd.date_range(start='2024-01-01', periods=5, freq='D')
ts = pd.Series(data, index=dates)
ts
2024-01-01    1
2024-01-02    2
2024-01-03    3
2024-01-04    4
2024-01-05    5
Freq: D, dtype: int64

其中,periods是時(shí)間序列的長度,freq是頻率,這里設(shè)置為'D'表示每天。

時(shí)間序列的索引和切片: 使用日期進(jìn)行索引

import pandas as pd
ts['2024-01-01']
1

使用日期范圍進(jìn)行切片:

import pandas as pd
ts['2024-01-01':'2024-01-05']
2024-01-01    1
2024-01-02    2
2024-01-03    3
2024-01-04    4
2024-01-05    5
Freq: D, dtype: int64

也可以使用切片操作對(duì)數(shù)據(jù)進(jìn)行訪問

import pandas as pd
ts[1:4]
2024-01-02    2
2024-01-03    3
2024-01-04    4
Freq: D, dtype: int64

時(shí)間序列的重采樣: 將時(shí)間序列從高頻率轉(zhuǎn)換為低頻率:

import pandas as pd
ts.resample('W').mean()
2024-01-07    3.0
Freq: W-SUN, dtype: float64

其中,'W'表示按周進(jìn)行重采樣,mean()表示計(jì)算每周的平均值。

時(shí)間序列的滾動(dòng)計(jì)算: 計(jì)算滾動(dòng)平均值:

import pandas as pd
ts.rolling(window=3).mean()
2024-01-01    NaN
2024-01-02    NaN
2024-01-03    2.0
2024-01-04    3.0
2024-01-05    4.0
Freq: D, dtype: float64

其中,window=3表示窗口大小為3,即計(jì)算每3個(gè)數(shù)據(jù)的平均值。

時(shí)間序列的時(shí)間偏移: 將時(shí)間序列向前或向后移動(dòng):

import pandas as pd
ts.shift(1)
2024-01-01    NaN
2024-01-02    1.0
2024-01-03    2.0
2024-01-04    3.0
2024-01-05    4.0
Freq: D, dtype: float64

其中,1表示向后移動(dòng)1個(gè)時(shí)間單位。

時(shí)間訪問器dt

在 Pandas 中,可以使用 dt 訪問器來訪問時(shí)間戳或時(shí)間序列中的各個(gè)時(shí)間部分,例如年、月、日、小時(shí)、分鐘、秒等。通過使用 dt 訪問器,你可以方便地提取和操作時(shí)間信息。

下面是一些常用的 dt 訪問器的示例:

import pandas as pd

# 創(chuàng)建一個(gè)時(shí)間序列
timestamps = pd.Series(pd.date_range('2023-01-01', periods=5, freq='D'))
timestamps
0   2023-01-01
1   2023-01-02
2   2023-01-03
3   2023-01-04
4   2023-01-05
dtype: datetime64[ns]
# 提取年份
year = timestamps.dt.year
year
0    2023
1    2023
2    2023
3    2023
4    2023
dtype: int64
# 提取月份
month = timestamps.dt.month
month
0    1
1    1
2    1
3    1
4    1
dtype: int64
# 提取日期
day = timestamps.dt.day
day
0    1
1    2
2    3
3    4
4    5
dtype: int64
# 提取小時(shí)
hour = timestamps.dt.hour
hour
0    0
1    0
2    0
3    0
4    0
dtype: int64
# 提取分鐘
minute = timestamps.dt.minute
minute
0    0
1    0
2    0
3    0
4    0
dtype: int64
# 提取秒數(shù)
second = timestamps.dt.second
second
0    0
1    0
2    0
3    0
4    0
dtype: int64
# 獲取季度
quarter = timestamps.dt.quarter
quarter
0    1
1    1
2    1
3    1
4    1
dtype: int64
# 獲取周數(shù)
week = timestamps.dt.isocalendar().week
week
0    52
1     1
2     1
3     1
4     1
Name: week, dtype: UInt32
# 獲取星期幾的名稱
day_name = timestamps.dt.day_name()
day_name
0       Sunday
1       Monday
2      Tuesday
3    Wednesday
4     Thursday
dtype: object
# 獲取該日期是一年中的第幾天
day_of_year = timestamps.dt.dayofyear
day_of_year
0    1
1    2
2    3
3    4
4    5
dtype: int64
# 獲取該日期是一周中的第幾天(星期一為1,星期日為7)
day_of_week = timestamps.dt.dayofweek + 1
day_of_week
0    7
1    1
2    2
3    3
4    4
dtype: int64
# 獲取該日期是一個(gè)月中的第幾天
day_of_month = timestamps.dt.day
day_of_month
0    1
1    2
2    3
3    4
4    5
dtype: int64
# 獲取該日期所在月份的最后一天
end_of_month = timestamps.dt.daysinmonth
end_of_month
0    31
1    31
2    31
3    31
4    31
dtype: int64

時(shí)長轉(zhuǎn)化

import pandas as pd

# 創(chuàng)建時(shí)間戳序列
ts = pd.Series(pd.to_timedelta(np.arange(10),unit='m'))
ts
0   0 days 00:00:00
1   0 days 00:01:00
2   0 days 00:02:00
3   0 days 00:03:00
4   0 days 00:04:00
5   0 days 00:05:00
6   0 days 00:06:00
7   0 days 00:07:00
8   0 days 00:08:00
9   0 days 00:09:00
dtype: timedelta64[ns]
# 提取時(shí)間戳中的秒數(shù)
seconds = ts.dt.seconds
seconds
0      0
1     60
2    120
3    180
4    240
5    300
6    360
7    420
8    480
9    540
dtype: int64
seconds = ts.dt.to_pytimedelta()
seconds
array([datetime.timedelta(0), datetime.timedelta(seconds=60),
       datetime.timedelta(seconds=120), datetime.timedelta(seconds=180),
       datetime.timedelta(seconds=240), datetime.timedelta(seconds=300),
       datetime.timedelta(seconds=360), datetime.timedelta(seconds=420),
       datetime.timedelta(seconds=480), datetime.timedelta(seconds=540)],
      dtype=object)

以上是Pandas針對(duì)時(shí)間序列的一些常用操作和示例代碼

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }