在 Pandas 上连接两个 DataFrame,没有符号,只有日期(来自 pd.datareader)
Concat two DataFrames on Pandas without Symbol, only Dates (from pd.datareader)
我使用 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 吗?
您的 0 级 MultiIndex 'Symbol' 导致了这个问题。尝试删除该级别然后 concat
citi.index = citi.index.droplevel()
boaml.index = boaml.index.droplevel()
pd.concat([citi.add_suffix('_citi'), boaml.add_suffix('_boaml')], axis = 1)
我使用 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 吗?
您的 0 级 MultiIndex 'Symbol' 导致了这个问题。尝试删除该级别然后 concat
citi.index = citi.index.droplevel()
boaml.index = boaml.index.droplevel()
pd.concat([citi.add_suffix('_citi'), boaml.add_suffix('_boaml')], axis = 1)