我正在讀取一個帶有時間列的 Excel 檔案。由于我無法上傳實際檔案,我創建了變數timeIntervals來說明。
當我運行此代碼時...
import pandas as pd
import datetime
from pyPython import *
def main():
timeIntervals = pd.date_range("11:00", "21:30", freq="30min").time
df = pd.DataFrame({"Times": timeIntervals})
grp = pd.Grouper(key="Times", freq="3H")
value = df.groupby(grp).count()
print(value)
if __name__ == '__main__':
main()
我收到以下錯誤:
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'
如何pandas.Grouper結合使用DataFrame.groupby將資料幀“分組”df為離散時間范圍(3 小時)?還有其他選擇嗎?
uj5u.com熱心網友回復:
幾個問題:
- A
date_range不能簡化為time僅在不丟失時間視窗重采樣所需的資料型別的情況下。 count計算一列中的非 NaN 值,因此必須提供一個,因為樣本框中沒有剩余的列。
我們可以通過將時間列轉換為日期時間來解決第一個問題:
timeIntervals = pd.date_range("11:00", "21:30", freq="30min") # remove time here
df = pd.DataFrame({"Times": timeIntervals})
如果我們不是從 a 創建這些值,date_range我們可以簡單地轉換列to_datetime:
df['Times'] = pd.to_datetime(df['Times'], format='%H:%M:%S')
然后我們可以分組并計數:
value = df.groupby(pd.Grouper(key="Times", freq="3H"))['Times'].count()
如果需要,我們可以更新index以僅反映time分組后:
value.index = value.index.time
結果value變成:
09:00:00 2
12:00:00 6
15:00:00 6
18:00:00 6
21:00:00 2
Name: Times, dtype: int64
所有與to_datetime:
def main():
time_intervals = pd.date_range("11:00", "21:30", freq="30min").time
df = pd.DataFrame({"Times": time_intervals})
# Convert to DateTime
df['Times'] = pd.to_datetime(df['Times'], format='%H:%M:%S')
# Group and count specific column
value = df.groupby(pd.Grouper(key="Times", freq="3H"))['Times'].count()
# Retrieve only Time information
value.index = value.index.time
print(value)
或者time在創建 DataFrame 之前不檢索:
def main():
time_intervals = pd.date_range("11:00", "21:30", freq="30min")
df = pd.DataFrame({"Times": time_intervals})
value = df.groupby(pd.Grouper(key="Times", freq="3H"))['Times'].count()
value.index = value.index.time
print(value)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/338586.html
標籤:Python 熊猫 数据框 约会时间 pandas-groupby
下一篇:將字符突變為R中的日期/時間
