У меня есть следующие данные (18 619 211 строк), хранящиеся в качестве объекта dataframe pandas в файле hdf5:
date id2 w
id
100010 1980-03-31 10401 0.000839
100010 1980-03-31 10604 0.020140
100010 1980-03-31 12490 0.026149
100010 1980-03-31 13047 0.033560
100010 1980-03-31 13303 0.001657
где id
- индекс, а другие - столбцы. date
- np.datetime64
. Мне нужно выполнить такой запрос (код, конечно, не работает):
db=pd.HDFStore('database.h5')
data=db.select('df', where='id==id_i & date>bgdt & date<endt')
Примечание id_i, bgdt, endt
- это все переменные, а не фактические значения и должны быть переданы в цикле. например:
dates
- это индекс периода Панды или индекс временных меток, в любом случае, я могу конвертироваться друг в друга.
dates=['1990-01', 1990-04','1990-09',......]
id_list
- это список идентификаторов
id_list=[100010, 100011,1000012,.......]
Цикл выглядит так (причина, по которой я делаю цикл, состоит в том, что данные огромны, есть и другие наборы данных, у меня есть запрос в одно и то же время, а затем выполняются некоторые операции)
db=pd.HDFStore('database.h5')
for id_i in id_list:
for date in dates:
bgdt=date-1 (move to previous month)
endt=date-60 (previous 60 month)
data=db.select('df', where='index==id_i & date>bgdt & date<endt')
......
Эта проблема состоит из двух частей:
- Я не знаю, как запросить индекс и столбцы в одно и то же время. Документ в pandas показал, как запросить на основе условий индекса или условий столбцов, но нет примеров того, как на основе запросов запрашивать их в ОДНОМ ВРЕМЕНИ.
- (Кстати, это очень распространено в документации по Pandas. Док обычно показывает очень простую вещь, например, как делать "A", или как делать "B", но не как делать BOTH "A" и "B". Пример - это использование
query
на мультидюймовом фрейме pandas. Документ отображается на основеlevel=0
ORlevel=1
, но нет примера о том, как делать BOTH в ОДНОМ ВРЕМЕНИ.)
- (Кстати, это очень распространено в документации по Pandas. Док обычно показывает очень простую вещь, например, как делать "A", или как делать "B", но не как делать BOTH "A" и "B". Пример - это использование
- Я не знаю, как передать три
id_i, bgdt, endt
в запрос. Я знаю, как пройти только с помощью%s
, но не всех из них.- Я также немного запутался с типом datetime. Кажется, что довольно много времени:
datetime.datetime
,numpy.datetime64
,pandas.Period
. Я в основном работаю над ежемесячными данными, поэтомуpandas.Period
является наиболее полезным. Но я не могу легко преобразовать столбец (не индекс) временных меток (тип даты по умолчанию для Pandas при анализе из необработанных данных). Есть ли какой-то тип данных, который является просто "датой", а не меткой времени, а не периодом, а просто простой ДАТА с только годом, месяцем и днем?
- Я также немного запутался с типом datetime. Кажется, что довольно много времени:
Много неприятностей, но я действительно ЛЮБЛЮ питон и панды (я пытаюсь переместить мой рабочий процесс с SAS на Python). Любая помощь будет оценена!