如何按日期和時間對 Pandas DataFrame 進行分組?
在資料分析和處理中,經常會處理包含日期和時間資訊的資料。一個有用的操作是根據日期和時間對資料進行分組,以便執行聚合或提取特定資訊。在本文中,我們將研究如何利用 Python 中 Pandas 庫的強大功能,按日期和時間對 Pandas DataFrame 進行分組。
語法
在深入細節之前,讓我們從我們將在下文中使用的技術的語法開始:
dataframe.groupby(pd.Grouper(key='column_name', freq='frequency')).operation()
這裡,dataframe 指的是 Pandas DataFrame 物件,column_name 表示包含日期和時間資訊的列的名稱,freq 表示我們希望按其分組資料的頻率(例如,'D' 表示每日,'M' 表示每月,'H' 表示每小時),而 operation() 表示要對分組資料執行的操作。
演算法
現在,讓我們逐步瞭解按日期和時間分組 Pandas DataFrame 的過程:
匯入必要的庫:
import pandas as pd - 匯入 Pandas 庫用於資料處理和分析。
將資料載入到 Pandas DataFrame 中:
dataframe = pd.read_csv('data.csv') - 從 CSV 檔案讀取資料並將其儲存在名為 dataframe 的 DataFrame 中。
將日期和時間列轉換為 datetime 資料型別:
dataframe['datetime_column'] = pd.to_datetime(dataframe['datetime_column']) - 將指定的列 datetime_column 轉換為 datetime 資料型別。此步驟確保 Pandas 將該列識別為包含日期和時間。
按日期和時間對 DataFrame 進行分組:
grouped_data = dataframe.groupby(pd.Grouper(key='datetime_column', freq='frequency')) - 使用 groupby() 方法和 pd.Grouper 根據 datetime_column 和指定的頻率對 DataFrame 進行分組。
對分組資料執行操作:
result = grouped_data.operation() - 對分組資料應用所需的操作,其中 operation() 可以是任何 Pandas 操作或方法。
Data.csv
datetime_column,value 2023-07-01 08:00:00,10 2023-07-01 12:00:00,5 2023-07-02 09:00:00,7 2023-07-02 14:00:00,3 2023-07-03 10:00:00,8 2023-07-03 16:00:00,2 2023-07-04 11:00:00,6 2023-07-04 18:00:00,4
方法一:按每日頻率分組
在這種方法中,我們將按每日頻率對 DataFrame 進行分組,從而允許我們對每日資料執行聚合或計算。
示例
import pandas as pd # Load the data from the CSV file into a Pandas DataFrame dataframe = pd.read_csv('data.csv') # Convert the 'datetime_column' to a datetime data type dataframe['datetime_column'] = pd.to_datetime(dataframe['datetime_column']) # Group the DataFrame by date and time using daily frequency grouped_data = dataframe.groupby(pd.Grouper(key='datetime_column', freq='D')) # Perform an operation on the grouped data (sum the 'value' column) result = grouped_data['value'].sum() # Print the result print(result)
輸出
datetime_column 2023-01-05 5 2023-01-06 0 2023-01-07 0 2023-01-08 0 2023-01-09 2 .. 2023-12-27 0 2023-12-28 3 2023-12-29 0 2023-12-30 0 2023-12-31 16 Freq: D, Name: value, Length: 361, dtype: int64
解釋
按每日頻率分組
在這種方法中,我們希望按每日頻率對 DataFrame 中的資料進行分組,並計算每個日期的“value”列的總和。
程式碼首先匯入必要的庫。我們使用別名“pd”匯入 pandas 庫,以便有效地使用 DataFrames。
然後,我們使用 pd.read_csv() 函式將 CSV 檔案中的資料載入到 Pandas DataFrame 中。我們假設資料儲存在一個名為“data.csv”的檔案中。如有必要,請更改檔案路徑。
為了處理 DataFrame 中的日期和時間資料,我們需要將相應的列轉換為 datetime 資料型別。我們使用 pd.to_datetime() 函式並傳遞列名“datetime_column”來正確轉換它。
轉換列後,我們就可以使用每日頻率按日期對 DataFrame 進行分組了。我們對 DataFrame 使用 groupby() 方法,並使用 pd.Grouper(key='datetime_column', freq='D') 指定 key 為'datetime_column',頻率為'D'(每日)。
分組資料後,我們可以在分組資料上執行操作。在這種情況下,我們需要計算每個日期“value”列的總和。我們指定“value”為感興趣的列,並將 sum() 方法應用於分組資料。
最後,我們可以列印結果以檢視 DataFrame 中每個日期“value”列的總和。
請注意,您需要更改程式碼中的檔案路徑或名稱以匹配您的特定 CSV 檔案。執行此程式碼示例應該會為您提供理想的結果,顯示 DataFrame 中每個日期“value”列的總和。此方法提供了一種按每日頻率對 DataFrame 進行分組並在每日基礎上執行計算或聚合的方法,使您可以分析和提取資料中的有意義的見解。
方法二:按每小時頻率分組
在此方法中,我們將按每小時頻率對 DataFrame 進行分組,使我們能夠按小時分析或操作資料。這是一個演示如何實現此目標的示例:
示例
import pandas as pd # Load the data from the CSV file into a Pandas DataFrame dataframe = pd.read_csv('data.csv') # Convert the date and time column to a datetime data type dataframe['datetime_column'] = pd.to_datetime(dataframe['datetime_column']) # Group the DataFrame by date and time using hourly frequency grouped_data = dataframe.groupby(pd.Grouper(key='datetime_column', freq='H')) # Perform an operation on the grouped data result = grouped_data['value'].mean() # Print the result print(result)
輸出
datetime_column 2023-01-05 17:00:00 5.0 2023-01-05 18:00:00 NaN 2023-01-05 19:00:00 NaN 2023-01-05 20:00:00 NaN 2023-01-05 21:00:00 NaN ... 2023-12-31 01:00:00 NaN 2023-12-31 02:00:00 NaN 2023-12-31 03:00:00 NaN 2023-12-31 04:00:00 NaN 2023-12-31 05:00:00 8.0 Freq: H, Name: value, Length: 8629, dtype: float64
解釋
按每小時頻率分組
在這種方法中,我們希望按每小時頻率對 DataFrame 中的資料進行分組,並計算每個小時“value”列的平均值。
程式碼首先匯入必要的庫。我們使用別名“pd”匯入 pandas 庫,以便有效地使用 DataFrames。
然後,我們使用 pd.read_csv() 函式將 CSV 檔案中的資料載入到 Pandas DataFrame 中。我們假設資料儲存在一個名為“data.csv”的檔案中。如有必要,請更改檔案路徑。
為了處理 DataFrame 中的日期和時間資料,我們需要將相應的列轉換為 datetime 資料型別。我們使用 pd.to_datetime() 函式並傳遞列名“datetime_column”來正確轉換它。
轉換列後,我們就可以使用每小時頻率按小時對 DataFrame 進行分組了。我們對 DataFrame 使用 groupby() 方法,並使用 pd.Grouper(key='datetime_column', freq='H') 指定 key 為'datetime_column',頻率為'H'(每小時)。
分組資料後,我們可以在分組資料上執行操作。在這種情況下,我們需要計算每個小時“value”列的平均值。
我們指定“value”為感興趣的列,並將 mean() 方法應用於分組資料。
最後,我們可以列印結果以檢視 DataFrame 中每個小時“value”列的平均值。
請注意,您需要更改程式碼中的檔案路徑或名稱以匹配您的特定 CSV 檔案。執行此程式碼示例應該會為您提供理想的結果,顯示 DataFrame 中每個小時“value”列的平均值。
此方法提供了一種按每小時頻率對 DataFrame 進行分組並在每小時基礎上執行計算或聚合的方法,使您可以分析和提取資料中的有意義的見解。
結論
透過使用 Python 中 Pandas 庫的強大功能,我們可以輕鬆地按日期和時間對 Pandas DataFrame 進行分組。此功能使我們能夠根據不同的頻率(如每日、每小時、每月等)執行各種聚合、計算或分析。Pandas 提供的靈活性使其成為以簡潔高效的方式處理和操作時間序列資料的重要工具。透過遵循所示步驟並使用提供的語法,您現在可以成功地按日期和時間對 Pandas DataFrame 進行分組,以從資料中提取有意義的見解。