熱線電話:13121318867

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

《Python數據分析極簡入門》

第3節 10 Pandas 時序數據

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

創建時間序列數據

方式① 使用to_datetime創建時間序列:直接傳入列表即可

import pandas as pd

# 將列表轉換為時間戳
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()創建一段連續的時間范圍:使用指定參數即可

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是結束日期,freq是頻率,這里設置為'D'表示每天。

方式③ 使用Timestamp()函數創建一個特定的時間戳:使用指定參數即可

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 模塊創建時間戳:使用指定參數即可

import pandas as pd
from datetime import datetime

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

時長數據計算

計算一下兩個時間數據之差

import pandas as pd

# 創建兩個固定時間
start_time = pd.Timestamp('2024-01-01 12:00:00')
end_time = pd.Timestamp('2024-01-02 14:30:00')

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

一個固定時間加上pd.Timedelta類型的時間差

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

時序索引

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

將日期作為索引創建時間序列:

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是時間序列的長度,freq是頻率,這里設置為'D'表示每天。

時間序列的索引和切片: 使用日期進行索引

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

使用日期范圍進行切片:

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

也可以使用切片操作對數據進行訪問

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

時間序列的重采樣: 將時間序列從高頻率轉換為低頻率:

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

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

時間序列的滾動計算: 計算滾動平均值:

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,即計算每3個數據的平均值。

時間序列的時間偏移: 將時間序列向前或向后移動:

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表示向后移動1個時間單位。

時間訪問器dt

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

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

import pandas as pd

# 創建一個時間序列
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
# 提取小時
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
# 提取秒數
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
# 獲取周數
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
# 獲取該日期是一個月中的第幾天
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

時長轉化

import pandas as pd

# 創建時間戳序列
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]
# 提取時間戳中的秒數
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針對時間序列的一些常用操作和示例代碼

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢