如何将两个数据帧合并成不同大小的行?

2024-04-20 07:43:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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,那么它将在数据帧中,但如果只有一个数据帧包含该日期,那么它将忽略或不将其放在联合数据帧中。 非常感谢


Tags: 数据fromimportwebpandasdffordatetime
1条回答
网友
1楼 · 发布于 2024-04-20 07:43:35

一种解决方法如下

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'})

然而,通过检查单个数据帧,看起来虽然tech只有财务日,但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)

相关问题 更多 >