Конкат двух DataFrames на пандах без символа, только даты (из pd.datareader) - PullRequest
0 голосов
/ 22 мая 2018

Я импортировал данные фондового рынка, используя pandas_datareader:

from pandas_datareader import data, wb
import pandas as pd
import datetime
start = datetime.datetime(2006, 1,1)
end = datetime.datetime(2016, 1,1)
boaml = data.DataReader('BAC', 'morningstar', start, end)
citi = data.DataReader('C', 'morningstar', start, end)

Данные выглядят аккуратно, как представлено результатом citi.head():

Close   High    Low     Open    Volume

Symbol  Date    

C   

2006-01-02  485.3   487.1   482.2   483.5   0

2006-01-03  492.9   493.8   481.1   490.0   1536700

2006-01-04  483.8   491.0   483.5   488.6   1852790

2006-01-05  486.2   487.8   484.0   484.4   1015470

2006-01-06  486.2   489.0   482.0   488.8   1358930

Теперь, когда я пытаюсьчтобы объединить их, используя pd.concat(), я получаю NaN в верхнем правом углу и в нижнем левом углу матрицы:

bank_stocks = pd.concat([boaml, citi], axis=1, join='outer')

Посмотрите на bank_stocks.head():

Close   High    Low     Open    Volume  Close   High    Low     Open    Volume

Symbol  Date    

BAC     2006-01-02  46.15   46.36   45.91   46.02   0.0     NaN     NaN     NaN     NaN     NaN

2006-01-03  47.08   47.18   46.15   46.92   16197900.0  NaN     NaN     NaN     NaN     NaN

2006-01-04  46.58   47.24   46.45   47.00   17427400.0  NaN     NaN     NaN     NaN     NaN

2006-01-05  46.64   46.83   46.32   46.58   14668900.0  NaN     NaN     NaN     NaN     NaN

2006-01-06  46.57   46.91   46.35   46.80   11965700.0  NaN     NaN     NaN     NaN     NaN

И bank_stocks.tail():

Закрыть Высокий Низкий Открытый объем Закрыть Закрыть Высокий Низкий Открытый объем

Символ Дата

C   2015-12-28  NaN     NaN     NaN     NaN     NaN     52.38   52.57   51.96   52.57   8760674.0

2015-12-29  NaN     NaN     NaN     NaN     NaN     52.98   53.22   52.74   52.76   10153634.0

2015-12-30  NaN     NaN     NaN     NaN     NaN     52.30   52.94   52.25   52.84   8763137.0

2015-12-31  NaN     NaN     NaN     NaN     NaN     51.75   52.39   51.75   52.07   11275231.0

2016-01-01  NaN     NaN     NaN     NaN     NaN     51.75   51.75   51.75   51.75   0.0

(Заранее извиняюсь, если вывод не ясен, Я надеюсь, что код может быть легче при воспроизведении ошибки).

Я понимаю, что проблема заключается в Symbol, однако я пробовал MultiIndexing и не работал.

Любая идеяКак я могу получить матрицу, которая объединяет данные о запасах для boaml и citi под одной и той же датой, без отображения NaN?

1 Ответ

0 голосов
/ 22 мая 2018

Ваш уровень 0 MultiIndex 'Символ' вызывает проблему.Попробуйте удалить этот уровень, а затем concat

citi.index = citi.index.droplevel()
boaml.index = boaml.index.droplevel()

pd.concat([citi.add_suffix('_citi'), boaml.add_suffix('_boaml')], axis = 1)
...