首页 > 解决方案 > python pandas数组合并

问题描述

我想合并从 pandas web datareader 收集的有关股票的数据。这是我的代码:

ntes = web.DataReader('ntes', 'morningstar', '5-5-2015', '7-27-2018')
print(type(ntes))
spx = web.DataReader('spx', 'morningstar', '5-5-2015', '7-27-2018')

ntes.rename(columns={'Close': 'CloseNTES'}, inplace=True)
spx.rename(columns={'Close': 'CloseSPX'}, inplace=True)
ntes=ntes['CloseNTES']
spx=spx['CloseSPX']
print( ntes.head())
print(spx.head())
df1=pd.concat([ntes, spx], axis=1, ignore_index=False)
print(df1.head())

我得到了一个数组,但首先获取关于一只股票的值,然后从另一只股票中获取值,这样一行中的两只股票都没有值。这是打印的内容。

Symbol  Date      
ntes    2015-05-05    125.295
        2015-05-06    123.300
        2015-05-07    127.500
        2015-05-08    129.230
        2015-05-11    128.890
Name: CloseNTES, dtype: float64
Symbol  Date      
spx     2015-05-05    2089.4601
        2015-05-06    2080.1450
        2015-05-07    2087.9973
        2015-05-08    2116.0951
        2015-05-11    2105.3275
Name: CloseSPX, dtype: float64
                   CloseNTES  CloseSPX
Symbol Date                           
ntes   2015-05-05    125.295       NaN
       2015-05-06    123.300       NaN
       2015-05-07    127.500       NaN
       2015-05-08    129.230       NaN
       2015-05-11    128.890       NaN

标签: pythonpandas

解决方案


数据帧具有不同的多索引(第一个数据帧的第一级是“spx”,第二个数据帧是“ntes”)。为了使它们兼容,将多索引的“符号”级别转换为列,然后连接:

pd.concat([df.reset_index(level=0), df1.reset_index(level=0)],axis=1)
#           Symbol  CloseNTES Symbol   CloseSPX
#Date                                          
#2015-05-05   ntes    125.295    spx  2089.4601
#2015-05-06   ntes    123.300    spx  2080.1450
#2015-05-07   ntes    127.500    spx  2087.9973
#2015-05-08   ntes    129.230    spx  2116.0951
#2015-05-11   ntes    128.890    spx  2105.3275

推荐阅读