在日常資料分析中,資料通常按日期進行分析。 例如,我們需要通過使用者的下單時間來分析使用者在不同時間段對產品的偏好; 例如,使用訪問日誌的訪問時間來分析系統的訪問週期和負載,為不同時間段的資源分配提供依據。 例如,通過使用者較短的刷牙時間分析使用者的行為特徵和工作時間和工作型別; 可以看出,在資料分析中,基於日期(時間)進行分析的情況還有很多。
同時,根據資料的記錄方式,儲存時間的格式也不同。 例如,一些系統記錄以 2024 2 1 的格式記錄; 部分系統記錄格式為2024-02-01 09:31:52; 有些會直接儲存時間戳(1698724307189)進行記錄; 儲存時間的方法有很多種,所以我們在這裡就不舉例了。
如果想要完全實現對不同格式的相容性,往往需要寫很多瑣碎的**。 而這只是最簡單的提取年、月和日。 其他的,如時間的加法和減法,就不容易完成。 作為最強大的資料分析工具集,熊貓自然也提供了一套非常強大的時間資料處理工具,下面我們一起來看看吧。
timestamp:表示某個時間點,例如使用者下單的時間,或者訪問系統的時間。 DateTimeIndex:表示時間點的序列,相當於由多個時間戳組成的列表。 Timedelta:單個持續時間。 例如,3 分鐘、5 分鐘等都被視為持續時間,並且持續時間具有不同的單位。 常見的是天、小時、分鐘等。 TimeDeltaIndex:一系列多個持續時間,類似於 DateTimeIndex 和 Timestamp 之間的關係。 dataOffset:日曆維度中時間的偏移量。 例如,如果時間是 2024 年 2 月 1 日,日曆偏移了一天,則為 2024 年 1 月 31 日。 資料偏移提供了多種偏移方法,例如按工作日偏移,以便從周五上午 10 點到下乙個工作日的偏移時間為周一上午 10 點。 在 pandas 中進行時間處理時,最常使用以下場景:
1.將各種格式的時間資料轉換為時間戳型別。
2.使用timestamp型別獲取時間的各種屬性。 例如日期、時間、星期幾等。
3.使用時間戳和時間增量來計算時間,例如加法和減法。 例如,將當前時間增加 3 分鐘。 如果需要偏移日曆尺寸,則需要將其與偏移一起使用。
4. 按時間過濾資料幀中的記錄。 您需要將時間列設定為 datetimeindex,然後像使用普通索引一樣按時間進行篩選。在Python中,解析時間資料本質上是先將資料轉換為pandas的時間戳型別,因為只有在轉換之後才能進行後續操作。
Pandas 提供了一種 datetime 方法,用於將不同型別的時間資料轉換為時間戳型別。
字串是一種常見的時間儲存格式,to datetime 函式支援幾乎所有主要表示法,例如。
import pandas as pd
表示日期 + 時間的常用方法。
pd_time = pd.to_datetime("2023-08-29 17:17:22")
print(type(pd_time),pd_time)
時間縮寫並以 12 小時格式表示。
pd_time1 = pd.to_datetime("2023-08-29 5:17pm")
print(type(pd_time1), pd_time1)
表示法。
pd_time2 = pd.to_datetime("08/29/2023")
print(type(pd_time2), pd_time2)
結合英語表示的月份。
pd_time3 = pd.to_datetime("aug 29, 2023")
print(type(pd_time3), pd_time3)
執行後輸出:
從上面的輸出中可以看出,To DateTime 函式返回時間戳型別。 如果是中文環境,也可以解析“February 1, 2024”這樣的格式,我們可以通過自定義格式字串解析到datetime。 例如,以下 **:
使用自定義格式字串解析任意時間字串。
pd_time4 = pd.to_datetime("2月 1, 2024", format="%ymmmm%dday")
print(type(pd_time4), pd_time4)
輸出如下:
例如,我們上面談到的資料來源儲存是有時間戳的,所以我們的轉換方法如下:
time_value = 1620565604
將數字時間戳轉換為時間戳型別,並指定單位(以秒為單位)。
pd_time5 = pd.to_datetime(time_value, unit="s")
print(type(pd_time5), pd_time5)
輸出如下:
這裡需要注意的是:如果我們需要加入乙個時區,我們可以使用 tz localize("asia/shanghai") 指定。
通過分別指定年、月、日等資訊來建立時間戳物件。
pd_time7 = pd.timestamp(year=2024, month=2, day=1, hour=21)
print(type(pd_time7),pd_time7)
獲取當前時間。
pd_time8 = pd.timestamp("now")
print(type(pd_time8),pd_time8)
輸出如下:
當我們得到timestamp物件時,我們可以使用timestamp物件提供的方法來獲取各種時間屬性,獲取屬性的常用方法如下:
print("當前時間物件:", pd_time8)
print("星期幾,星期一是 0:", pd_time8.dayofweek)
print("星期幾,字串表示:", pd_time8.day_name())
print("一年中的幾天:", pd_time8.dayofyear)
print("每個月有幾天:",pd_time8.daysinmonth)
print("今年是不是閏年", pd_time8.is_leap_year)
print("當前日期是否為當月的最後一天", pd_time8.is_month_end)
print("當前日期是否為該月的第一天", pd_time8.is_month_start)
print("當前日期是否為季度的最後一天", pd_time8.is_quarter_end)
print("當前日期是否為季節的第一天", pd_time8.is_quarter_start)
print("當前日期是否為當年的最後一天", pd_time8.is_year_end)
print("當前日期是否為當年的第一天", pd_time8.is_year_start)
print("當前季度:", pd_time8.quarter)
print("當前時區:", pd_time8.tz)
print("一年中的週數:", pd_time8.week)
print("年:", pd_time8.year)
print("月:", pd_time8.month)
print("日:",pd_time8.day)
print("小時:", pd_time8.hour)
print("紀要:", pd_time8.minute)
print("秒:", pd_time8.second)
輸出如下:
簡單來說,時間的計算方式是當前時間之後的分鐘、小時或秒。因為時間的資料計算比較特殊,所以月份涉及的天數和分鐘數需要除以60,小時數換算成分鐘,也需要除以60。 然後我們就可以用熊貓來計算時間了。 pandas 的時間計算是通過 timestamp 物件和 timedelta 物件的混合實現的。
從字串。
delta1 = pd.timedelta('0.5 days')
print("半天:", delta1)
delta2 = pd.timedelta("2 days 3 hour 20 minutes")
print("2 天 3 小時 20 分鐘", delta2)
delta3 = pd.timedelta("1 days 20:36:00")
print("1 天 8 小時 36 分鐘:", delta3)
從單位時間建立。
delta4 = pd.timedelta(days = 1.5)
print("1天半:", delta4)
delta5 = pd.timedelta(days = 10, hours= 9)
print("十天九小時:", delta5)
由時間縮寫建立。W:代表周、周。
d:代表日期。
h:表示小時數。
m:表示分鐘。
s:代表秒。
delta6 = pd.timedelta("2w3d")
print("兩周零三天:", delta6)
delta7 = pd.timedelta("6h30m12s")
print("6小時30分12秒:", delta7)
獲取當前時間。
current_time = pd.timestamp("now")
print("當前時間:", current_time)
獲取當前時間減去兩周時間。
two_week_ago = current_time - pd.timedelta("2w")
print("兩周前:", two_week_ago)
獲取當前時間 30 天和 7 小時後的時間。
future_time = current_time + pd.timedelta("30d7h")
print("30 天零 7 小時後的時間:",future_time)
執行後的輸出如下:
除了計算時間增量和時間戳外,還可以減去兩個時間戳來獲得持續時間:
去年國慶節早上八點建立。
national_day = pd.to_datetime("2023-10-01 08:00:00")
計算當前時間與國慶時間的時間增量
delta8 = current_time - national_day
print("去年的國慶節已經過去了:", delta8)
輸出為:
讓我們看一下我們如何利用時間來查詢資料幀中的資料。
你可以自己準備示例資料,也可以直接建立乙個新的csv檔案來做模擬資料,如果你不想做,可以留言!將示例資料載入到 DataFrame 中後,需要將 time 字段設定為 datetimeindex。 轉換分為兩個步驟:
第 1 步:將時間列轉換為時間戳物件。
將時間列轉換為時間戳物件。
df_log["time"] = pd.to_datetime(df_log["time"])
檢視時間列。
df_log["time"]
執行後,輸出:
name: time, length: 1000, dtype: datetime64[ns]
第 2 步:將新的時間列設定為索引。
設定時間列以索引 df 日誌。
df_log.set_index("time", inplace=true)
檢視最新的資料幀
df_log
執行後輸出:
從圖中可以看出,時間列已經取代了之前的序列號,成為了資料幀的索引。
完成上述步驟後,我們可以按時間過濾 DataFrame 中的資料。
查詢9月1日至9月15日的資料。
df_log.loc["2018-09-01" : "2018-09-15",:]
選擇 8 月至 9 月的資料。
df_log.loc["2018-08" : "2018-09", :
選擇 8 月 1 日至 9 月 2 日下午 2 點前的資料。
df_log.loc["2018-08-01" : "2018-09-02 14:00:00", :
執行上述**後,我們可以看到按時間過濾的資料幀對應的資料。
歡迎閱讀 *** 伺服器技術選擇 2024 答案書