Добавить мультииндексный фрейм данных в HDF - PullRequest
0 голосов
/ 07 марта 2020

Следующие данные запаса на конец дня, например:

In [36]: df
Out[36]:
        Code                             Name     High      Low    Close  Volume  Change Change.2
0       AAAU     Perth Mint Physical Gold ETF  16.8500  16.3900  16.6900  311400  0.0000     0.02
1       AADR  Advisorshares Dorsey Wright ADR  49.8400  49.2300  49.6100   18500 -1.3000     2.54
2       AAMC                 Altisource Asset  24.0000  20.0000  23.9400    2500  0.3600     1.53
3        AAU                 Almaden Minerals   0.3987   0.3650   0.3684  355100 -0.0147     3.84
4       ABEQ       Absolute Core Strategy ETF  23.2100  22.8200  23.1100  114700 -0.1900     0.82
...      ...                              ...      ...      ...      ...     ...     ...      ...
26643   ZVLO                        Esoft Inc   0.0600   0.0600   0.0600    1000  0.0100       20
26644   ZVTK                      Zevotek Inc   0.0313   0.0209   0.0302   44900  0.0102       51
26645  ZXAIY   China Zenix Auto International   0.1534   0.1534   0.1534     200 -0.1566    50.52
26646   ZYRX            Zyrox Mining Intl Inc   0.0200   0.0181   0.0200    3000  0.0000        0
26647  ZZZOF           Zinc One Resources Inc   0.0111   0.0111   0.0111     300  0.0000        0

Дополнительный вопрос:

Есть несколько различных способов сохраняйте данные такого рода в формате HDF5.

  1. Не изменяйте DataFrame и сохраняйте его с помощью df.to_hdf (), чтобы различать группы, названные по дате.
  2. Разделите различные акции на серии и постройте таблицу по Имени или лучше по «Коду» с атрибутом «Имя»
  3. Добавьте мультииндексный DataFrame только в одну группу.

Полагаю, что третье решение будет самым быстрым и наиболее гибким в случае обработки и анализа данных. Но с помощью решения secound, кажется, легче добавлять новую информацию, такую ​​как основы, в каждую компанию. Есть ли лучший компромисс, которого я пока не знаю?

Основная проблема (третий путь):

Я использую этот код для добавления иерархического фрейма данных к каждому новый день:

df = pd.concat(lod, ignore_index=True)

# remove not useful dataj
df = df.drop(['Change.1', 'Change.2', 'Unnamed: 9'], axis=1)
df = df.dropna()

# append a Date column
df['Date'] = dt.datetime.today().date() - dt.timedelta(days=1)

# create multiindex
df = df.set_index(['Date', 'Code', 'Name'])

# append the data to hdf5 container
df.to_hdf(wkd + 'Database.h5', key='stocks', mode='a', format='table')

Таблица заменена, а не расширена. Что не так?

1 Ответ

0 голосов
/ 07 марта 2020

Ответ на мою основную проблему был довольно прост:

Найдите его здесь: https://github.com/pandas-dev/pandas/issues/4584

Просто добавьте 'append = True'

df.to_hdf(wkd + 'Database.h5', key='stocks', mode='a', format='table', append = True)

Редактировать: Мой текущий ответ на дополнительный вопрос будет:

Я думаю, что можно использовать третий способ, потому что легко запросить мультииндексный фрейм данных с объектом pandas HDFStore на дис c:

store.select('stocks', "Code=BMWYY")

Чтобы добавить новые данные, такие как основы комани, я просто добавляю новый объект таблицы в файл HDF. Затем я запрашиваю обе таблицы и делаю дальнейший анализ с pandas.

...