Я хочу выбрать данные из фреймворка данных за конкретный день года. Вот что я имею в качестве минимального примера.python pandas time series select day of year
import pandas as pd
from datetime import datetime
from datetime import timedelta
import numpy.random as npr
rng = pd.date_range('1/1/1990', periods=365*10, freq='D')
df1 = pd.DataFrame(npr.randn(len(rng)), index=rng)
print df1
Это создает:
0
1990-01-01 -0.032601
1990-01-02 -0.496401
1990-01-03 0.444490
и т.д. Теперь составьте список дат, которые я хочу, чтобы извлечь. Я использовал это раньше в пандах, но я подозреваю, что это не лучший способ получить значения для определенной даты. Во всяком случае,
td = timedelta(days=31)
dr = pd.date_range(datetime(1990,12,31)+td,datetime(2000,12,31),
freq=pd.DateOffset(months=12, days=0))
print dr
Это, конечно, порождает:
DatetimeIndex(['1991-01-31', '1992-01-31', '1993-01-31', '1994-01-31',
'1995-01-31', '1996-01-31', '1997-01-31', '1998-01-31',
'1999-01-31', '2000-01-31'],
dtype='datetime64[ns]', freq='<DateOffset: kwds={'months': 12, 'days': 0}>', tz=None)
При попытке разрезать dataframe по списку дат, сгенерировать ошибку:
monthly_df1 = df1[dr]
Выход:
KeyError: "['1991-01-30T16:00:00.000000000-0800' '1992-01-30T16:00:00.000000000-0800'\n
'1993-01-30T16:00:00.000000000-0800' '1994-01-30T16:00:00.000000000-0800'\n
'1995-01-30T16:00:00.000000000-0800' '1996-01-30T16:00:00.000000000-0800'\n
'1997-01-30T16:00:00.000000000-0800' '1998-01-30T16:00:00.000000000-0800'\n
'1999-01-30T16:00:00.000000000-0800' '2000-01-30T16:00:00.000000000-0800']
not in index"
Я думаю, что у меня есть две забавы Основные проблемы здесь: (1) существует лучший способ извлечения годовых данных за конкретную дату; и (2) временные ряды в списке dataframe и date_range отличаются. Я был бы признателен за информацию по обеим проблемам. Спасибо, сообщество.
Я планирую манипулировать DataFrame – marathonman4202
ли не 'df1 [(df1.index.month = = 1) & (df1.index.day == 31)] 'работает для вас в этом случае? – Zero
Я думаю, что маска будет работать, но я хотел бы иметь возможность корректировать к дню года (целое число от 1 до 365 или 366). Это позволяет мне использовать его внутри процедуры оптимизации. – marathonman4202