天天看點

56.時間序列資料查詢

作者:李光朱

案例導入

如下表,查詢每天中午12點時的測量值。添加代碼注釋。

時間 測量值
2022-03-18 00:00:00 5
2022-03-18 01:00:00 9
2022-03-18 02:00:00 6
2022-03-18 03:00:00 9
2022-03-18 04:00:00 8
2022-03-18 05:00:00 10
2022-03-18 06:00:00 4
2022-03-18 07:00:00 3
2022-03-18 08:00:00 6
2022-03-18 09:00:00 3
2022-03-18 10:00:00 1
2022-03-18 11:00:00 6
2022-03-18 12:00:00 7
2022-03-18 13:00:00 4
2022-03-18 14:00:00 1
2022-03-18 15:00:00 7
2022-03-18 16:00:00 4
2022-03-18 17:00:00 10
2022-03-18 18:00:00 8
2022-03-18 19:00:00 6
2022-03-18 20:00:00 6
2022-03-18 21:00:00 1
2022-03-18 22:00:00 5
2022-03-18 23:00:00 4
2022-03-19 00:00:00 5
2022-03-19 01:00:00 5
2022-03-19 02:00:00 4
2022-03-19 03:00:00 1
2022-03-19 04:00:00 8
2022-03-19 05:00:00 6
2022-03-19 06:00:00 1
2022-03-19 07:00:00 2
2022-03-19 08:00:00 8
2022-03-19 09:00:00 4
2022-03-19 10:00:00 9
2022-03-19 11:00:00 1
2022-03-19 12:00:00 8
2022-03-19 13:00:00 2
2022-03-19 14:00:00 5
2022-03-19 15:00:00 2
2022-03-19 16:00:00 6
2022-03-19 17:00:00 9
2022-03-19 18:00:00 6
2022-03-19 19:00:00 2
2022-03-19 20:00:00 1
2022-03-19 21:00:00 8
2022-03-19 22:00:00 1
2022-03-19 23:00:00 2
2022-03-20 00:00:00 6
2022-03-20 01:00:00 6
2022-03-20 02:00:00 10
2022-03-20 03:00:00 9
2022-03-20 04:00:00 6
2022-03-20 05:00:00 7
2022-03-20 06:00:00 8
2022-03-20 07:00:00 10
2022-03-20 08:00:00 1
2022-03-20 09:00:00 3
2022-03-20 10:00:00 1
2022-03-20 11:00:00 3
2022-03-20 12:00:00 2
2022-03-20 13:00:00 10
2022-03-20 14:00:00 9
2022-03-20 15:00:00 5
2022-03-20 16:00:00 2
2022-03-20 17:00:00 4
2022-03-20 18:00:00 10
2022-03-20 19:00:00 7
2022-03-20 20:00:00 6
2022-03-20 21:00:00 10
2022-03-20 22:00:00 4
2022-03-20 23:00:00 7
2022-03-21 00:00:00 7
2022-03-21 01:00:00 9
2022-03-21 02:00:00 8
2022-03-21 03:00:00 6
2022-03-21 04:00:00 2
2022-03-21 05:00:00 6
2022-03-21 06:00:00 10
2022-03-21 07:00:00 3
2022-03-21 08:00:00 2
2022-03-21 09:00:00 1
2022-03-21 10:00:00 7
2022-03-21 11:00:00 2
2022-03-21 12:00:00 9
2022-03-21 13:00:00 1
2022-03-21 14:00:00 7
2022-03-21 15:00:00 2
2022-03-21 16:00:00 2
2022-03-21 17:00:00 10
2022-03-21 18:00:00 5
2022-03-21 19:00:00 5
2022-03-21 20:00:00 4
2022-03-21 21:00:00 6
2022-03-21 22:00:00 4
2022-03-21 23:00:00 1
2022-03-22 00:00:00 5
2022-03-22 01:00:00 10
2022-03-22 02:00:00 6
2022-03-22 03:00:00 9

文心一言提示詞

打開百度“文心一言”,輸入提示詞:“你是pandas專家。檔案路徑為:D:/Samples/時間序列.xlsx。用pandas導入Excel檔案中第1個工作表中的資料,将第1列作為索引列,引擎為”openpyxl”。查詢每天中午12點時的測量值。添加代碼注釋。”

顯示結果如下:

為了完成這個任務,我們可以使用pandas庫來讀取Excel檔案中的資料,并使用DatetimeIndex來設定時間索引。由于我們需要查詢每天中午12點的測量值,我們假設時間資料是小時級别的,并且每一行都代表一個時間點的測量值。

下面是一個示例代碼,包括注釋以解釋每一步:

import pandas as pd

# 設定檔案路徑
file_path = 'D:/Samples/時間序列.xlsx'

# 讀取Excel檔案中第1個工作表的資料,将第1列作為索引列,引擎為'openpyxl'
# 注意:openpyxl引擎通常用于.xlsx檔案,而xlrd引擎用于.xls檔案(但在較新的pandas版本中可能需要指定)
df = pd.read_excel(file_path, sheet_name=0, index_col=0, engine='openpyxl')

# 假設第1列(即索引列)已經是datetime類型,如果不是,則需要先将其轉換為datetime類型
# 例如: df.index = pd.to_datetime(df.index)

# 驗證索引列是否為datetime類型
assert pd.api.types.is_datetime64_any_dtype(df.index), "Index is not datetime type"

# 建立一個新的時間索引,僅包含每天中午12點的時間
noon_times = pd.date_range(start=df.index.min(), end=df.index.max(), freq='C', normalize=True)

# normalize=True 確定時間被設定為每天的開始時間,但'C'頻率實際上表示每小時的開始,
# 是以在這裡我們主要是用它來確定頻率是按小時計算的,然後再手動設定為12點
noon_times = noon_times.map(lambda t: t.replace(hour=12, minute=0, second=0, microsecond=0))

# 建立一個空的資料框來存儲結果
noon_values = pd.DataFrame(columns=df.columns)

# 周遊noon_times清單,檢查每個時間點是否在資料框的索引中,如果在,則添加到結果資料框
for noon_time in noon_times:
    if noon_time in df.index:
        noon_values = noon_values.append(df.loc[noon_time])

# 如果資料框很大,上面的循環可能不是最高效的方法。
# 一個更高效的方法是使用resample方法,但前提是資料已經是規則的時間序列
# 如果資料不是規則的,可能需要先對其進行插值或重采樣

# 顯示結果
print(noon_values)           

注意:

  1. 如果你的時間序列資料不是每小時都有記錄(即不是規則的),那麼上面的noon_times生成和周遊方法可能無法找到所有存在的中午12點的記錄。
  2. 如果資料是規則的(即每天中午12點都有記錄),那麼可以使用resample方法更高效地找到這些記錄。
  3. 如果資料中存在多個列,并且你隻對某個特定列的中午12點值感興趣,你可以通過df['column_name'].loc[noon_time]來直接通路。
  4. 上面的noon_times生成方法使用了normalize=True和freq='C',但随後手動将小時設定為12點。在大多數情況下,如果你知道資料已經是按小時排序的,你可以直接通過篩選小時為12的行來找到這些值,而不需要生成整個noon_times清單。

Python運作結果

56.時間序列資料查詢

圖1.Python運作結果

本合集使用的工具如下:

文心一言:3.5版本

Python編輯器:3.9.0

申明:以上結果皆為實際運作結果,如遇到無法運作可在評論區留言。部分資料來自網絡,如有侵權請私信告知,感謝!