我有一個帶有日期時間索引的資料框,如下所示
Datetimeindex price1 ($/kWh) price2 ($/kWh) price3 ($/kWh) Price4 ($/kWh) price 5
2020-01-01 406.73 551.24 627.21 627.21 406.73
2020-01-02 397.90 551.24 627.21 627.21 397.90
2020-01-03 285.31 551.24 627.21 627.21 285.31
2020-01-04 255.36 551.24 627.21 627.21 255.36
2020-01-05 305.12 551.24 627.21 627.21 305.12
... ... ... ... ... ...
2021-09-30 141.72 665.00 810.47 810.47 141.72
2021-10-01 123.73 691.41 841.26 841.26 123.73
2021-10-02 122.95 691.41 841.26 841.26 122.95
2021-10-03 113.81 691.41 841.26 841.26 113.81
我想將資料框下標為
df['2020-01-01']
并得到錯誤:
KeyError: '2020-01-01'
如果決議到日期時間字串,則錯誤是
KeyError: datetime.datetime(2020, 1, 1, 0, 0)
我在網上搜索并得出結論,問題是日期時間索引型別,所以我需要將其決議為時間戳原生熊貓日期格式,但我無法完成。反正有沒有直接決議索引到時間戳?
編輯:
這是索引的型別
<bound method DatetimeIndex.to_series of DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
'2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08',
'2020-01-09', '2020-01-10',
...
'2021-09-25', '2021-09-26', '2021-09-27', '2021-09-28',
'2021-09-29', '2021-09-30', '2021-10-01', '2021-10-02',
'2021-10-03', '2021-10-04'],
dtype='datetime64[ns]', name='Fecha', length=643, freq=None)>
uj5u.com熱心網友回復:
請注意,自 Pandas 1.2.0 以來,格式中的下標日期字串df[string]已被棄用:
不推薦使用單個類似日期時間的字串作為 df[string] 索引 DataFrame 行(考慮到它是索引行還是選擇列的歧義),請改用 df.loc[string] (GH36179)
有關詳細資訊,另請參閱GH36179。
要使用日期字串下標 DatetimeIndex,現在我們必須使用.loc,如下所示:
df.loc['2020-01-01']
結果:
price1 ($/kWh) 406.73
price2 ($/kWh) 551.24
price3 ($/kWh) 627.21
Price4 ($/kWh) 627.21
price 5 406.73
Name: 2020-01-01 00:00:00, dtype: float64
您可以繼續通過部分日期字串下標來指定日期范圍,例如
df.loc['2020-01'] # for date range within a month
結果:
price1 ($/kWh) price2 ($/kWh) price3 ($/kWh) Price4 ($/kWh) price 5
2020-01-01 406.73 551.24 627.21 627.21 406.73
2020-01-02 397.90 551.24 627.21 627.21 397.90
2020-01-03 285.31 551.24 627.21 627.21 285.31
2020-01-04 255.36 551.24 627.21 627.21 255.36
2020-01-05 305.12 551.24 627.21 627.21 305.12
或者使用一系列月份:
df.loc['2021-09':'2021-10']
結果:
price1 ($/kWh) price2 ($/kWh) price3 ($/kWh) Price4 ($/kWh) price 5
2021-09-30 141.72 665.00 810.47 810.47 141.72
2021-10-01 123.73 691.41 841.26 841.26 123.73
2021-10-02 122.95 691.41 841.26 841.26 122.95
2021-10-03 113.81 691.41 841.26 841.26 113.81
您也可以只指定年份:
df.loc['2021']
結果:
price1 ($/kWh) price2 ($/kWh) price3 ($/kWh) Price4 ($/kWh) price 5
2021-09-30 141.72 665.00 810.47 810.47 141.72
2021-10-01 123.73 691.41 841.26 841.26 123.73
2021-10-02 122.95 691.41 841.26 841.26 122.95
2021-10-03 113.81 691.41 841.26 841.26 113.81
還支持各種格式的日期字串:
df.loc['20200102': '20200104'] # YYYYmmdd
結果:
price1 ($/kWh) price2 ($/kWh) price3 ($/kWh) Price4 ($/kWh) price 5
2020-01-02 397.90 551.24 627.21 627.21 397.90
2020-01-03 285.31 551.24 627.21 627.21 285.31
2020-01-04 255.36 551.24 627.21 627.21 255.36
df.loc['09/30/2021': '10/02/2021'] # mm/dd/YYYY
結果:
price1 ($/kWh) price2 ($/kWh) price3 ($/kWh) Price4 ($/kWh) price 5
2021-09-30 141.72 665.00 810.47 810.47 141.72
2021-10-01 123.73 691.41 841.26 841.26 123.73
2021-10-02 122.95 691.41 841.26 841.26 122.95
uj5u.com熱心網友回復:
您正在嘗試使用 df['2020-01-01'] 捕獲一列,如果您想過濾索引,請使用 df.index.filter,或 df[df.index.isin(date...)] 用于整個 df
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321386.html
上一篇:我想回傳帶有時間戳和計數的物件
