[英]Python/Pandas — Converting row number to hour and then slicing
我有一個已通過Pandas讀入Python的數據框,如下所示:
>>> df id temp 0 1 272.53702 1 2 272.41101 2 3 272.18503 3 4 271.79102 4 5 271.33701 5 6 270.86200 6 7 270.41501 7 8 269.97501 8 9 269.56201 9 10 269.18802 ...
id
字段表示從1989年第一個小時(1989年1月1日午夜)到2010年最后一個小時的每小時。我的目標是從temp
列中提取一個列表,該列表表示2002年5月1日至2006年11月20日的溫度,然后使用Scipy的樣條插值來擬合列表。 我的問題-將id
轉換為datetime,然后切片以獲得我想要的適當日期范圍的最有效方法是什么?
謝謝。
您可以使用日期算術確定與您要查找的開始日期和結束日期相對應的id
值,然后使用loc
選擇關聯的溫度。 這可能比將所有id
值轉換為日期然后進行切片更快。
start = 24*(pd.to_datetime('2002-05-01') - pd.to_datetime('1989-01-01')).days
end = 24*(pd.to_datetime('2006-11-20') - pd.to_datetime('1989-01-01')).days - 1
temp_values = df.loc[df['id'].between(start, end), 'temp'].values
通過“到2006年11月20日”,我假設你的意思了,但不包括11月20日,2006年如果你想通過 20的數據,只是在計算使用21而不是20日end
。 我要從end
減去1,以獲得計算中日期之前一天的最后一個小時,以不包括計算中使用的日期。
基本上,這是您需要使用的內容:
>>> from datetime import datetime, timedelta
>>> print datetime(1989, 1, 1)
1989-01-01 00:00:00
>>> print datetime(1989, 1, 1) + timedelta(hours=5)
1989-01-01 05:00:00
我建議僅添加一個datetime
列,該列將允許您傳遞datetime
對象以供選擇:
In [162]:
df['date'] = dt.datetime(1989,1,1) + pd.TimedeltaIndex(df['id'], 'h')
df
Out[162]:
id temp date
0 1 272.53702 1989-01-01 01:00:00
1 2 272.41101 1989-01-01 02:00:00
2 3 272.18503 1989-01-01 03:00:00
3 4 271.79102 1989-01-01 04:00:00
4 5 271.33701 1989-01-01 05:00:00
5 6 270.86200 1989-01-01 06:00:00
6 7 270.41501 1989-01-01 07:00:00
7 8 269.97501 1989-01-01 08:00:00
8 9 269.56201 1989-01-01 09:00:00
9 10 269.18802 1989-01-01 10:00:00
In [163]:
df.loc[df['date'] > '1989-01-01 06:00']
Out[163]:
id temp date
6 7 270.41501 1989-01-01 07:00:00
7 8 269.97501 1989-01-01 08:00:00
8 9 269.56201 1989-01-01 09:00:00
9 10 269.18802 1989-01-01 10:00:00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.