如何将两个不同大小的数据框组合在一起?

时间:2019-11-27 11:32:04

标签: python pandas dataframe

因此,当我尝试放置不同大小的数据框时,总是会导致错误。

import pandas as pd
from pandas import Series,DataFrame
import numpy as np

# For reading stock data from yahoo
import pandas_datareader as web

# For time stamps
from datetime import datetime

closing_df = web.DataReader(['AAPL','GOOG','MSFT','AMZN'],'yahoo',start,end)['Adj Close']
#when I do this, it is fine since the size are the same whereas
closing_df = web.DataReader(['AAPL','GOOG','MSFT','AMZN','BTC-USD'],'yahoo',start,end)['Adj Close']
#I always get this error
#ValueError: Index contains duplicate entries, cannot reshape

我试图拥有两个数据框,一个用于科技公司,一个用于BTC-USD 但是当我使用join,concat或merge时,似乎没有任何作用 我想获得两个数据集的所有联合日期并将其放在一起,例如如果两个数据框都具有2010-11-30,则它将位于数据框中,但如果只有一个数据框包含该日期,则它将忽略或不将其放入联合数据框中。 非常感谢

1 个答案:

答案 0 :(得分:1)

以下是一种解决方法

tech = web.DataReader(['AAPL','GOOG','MSFT','AMZN'],'yahoo', start, end)['Adj Close']
btc = web.DataReader('BTC-USD','yahoo', start, end)['Adj Close']

result_df = pd.merge(tech, btc, left_index=True, right_index=True).rename(columns={'Adj Close': 'BTC'})

但是,通过检查单个DataFrames可以看到,虽然技术仅具有财务日,但BTC也具有周末和假日,因此它们总体上检索不同的日期。 使用上述联接,您将丢失BTC数据。 也许最好是外部联接然后填写值:

result_df = pd.merge(tech, btc, left_index=True, right_index=True,
                     how='outer').rename(columns={'Adj Close': 'BTC'})
result_df.fillna(method='ffill', inplace=True)