HDFStore: Проверьте, содержит ли multiindex (столбцы данных) определенную дату - PullRequest
2 голосов
/ 07 марта 2020

Текущая структура таблицы:

store.get_storer('stocks').table
Out[65]:
/stocks/table (Table(26543,)) ''
  description := {
  "index": Int64Col(shape=(), dflt=0, pos=0),
  "values_block_0": Float64Col(shape=(4,), dflt=0.0, pos=1),
  "values_block_1": Int64Col(shape=(1,), dflt=0, pos=2),
  "Name": StringCol(itemsize=40, shape=(), dflt=b'', pos=3),
  "Code": StringCol(itemsize=8, shape=(), dflt=b'', pos=4),
  "Date": Int64Col(shape=(), dflt=0, pos=5)}
  byteorder := 'little'
  chunkshape := (630,)
  autoindex := True
  colindexes := {
    "index": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "Name": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "Code": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "Date": Index(6, medium, shuffle, zlib(1)).is_csi=False}

Я пытаюсь проверить, существует ли индекс на определенную дату: Моя первая попытка выдает синтаксическую ошибку:

tod = dt.datetime.today().date()

store = pd.HDFStore(f'{wkd}Database.h5)

df = store.select('stocks', f'Date={tod}')

if len(df) > 0:

   print('Found something!')

Та же ошибка с этим фрагментом кода:

g = store.get_storer('stocks')
g.read_axes(f'Date={lastday}')

Это сообщение об ошибке:

  File "<ipython-input-13-0cbe359284fa>", line 1, in <module>
    g.read_axes(f'Date={lastday}')

  File "path2venv/lib/python3.8/site-packages/pandas/io/pytables.py", line 3665, in read_axes
    self.selection = Selection(self, where=where, **kwargs)

  File "path2venv/lib/python3.8/site-packages/pandas/io/pytables.py", line 5003, in __init__
    self.terms = self.generate(where)

  File "path2venv/lib/python3.8/site-packages/pandas/io/pytables.py", line 5016, in generate
    return Expr(where, queryables=q, encoding=self.table.encoding)

  File "path2venv/lib/python3.8/site-packages/pandas/core/computtion/pytables.py", line 551, in __init__
    self.terms = self.parse()

  File "path2venv/lib/python3.8/site-packages/pandas/core/computation/expr.py", line 847, in parse
    return self._visitor.visit(self.expr)

  File "path2venv/lib/python3.8/site-packages/pandas/core/computation/expr.py", line 437, in visit
    raise e

  File "path2venv/lib/python3.8/site-packages/pandas/core/computation/expr.py", line 431, in visit
    node = ast.fix_missing_locations(ast.parse(clean))

  File "/usr/lib64/python3.8/ast.py", line 47, in parse
    return compile(source, filename, mode, flags,

  File "<unknown>", line 1
    Date ==2020 -0 3 -0 7

Как передать дату в запрос? Есть ли лучшее решение для проверки столбца индекса?

Редактировать: Может быть, это ошибка?

1 Ответ

0 голосов
/ 03 апреля 2020

Наконец-то я нашел простое решение:

df = store.select('stocks', f'Date=Timestamp("{tod}")')
...