Python - Pandas Dataframe 以正确的方式合并两个数据帧

Python - Pandas Dataframe merge two dataframes in the correct way

我做了两条曲线。两者都取决于日期,第二个(扩展)应该出现在第一个之后的日期范围内,但它只是得到以下结果:

这是我的代码:

   import pandas_datareader as web
   import pandas as pd

   import matplotlib.pyplot as plt

   stock = web.DataReader('MMM', data_source="yahoo", start='2021-01-01', end='2021-11-12')
   stock = stock.filter(["Adj Close"])
   extend = pd.DataFrame({'Date': ["2021-11-15", "2021-11-16"], 'Adj Close': [170, 171]})
   extend.set_index('Date')

   plt.figure(figsize=(16, 8))
   plt.plot(stock["Adj Close"])
   plt.plot(extend[["Adj Close"]])
   plt.show()

我认为问题与索引列有关,但我没有找到删除它的方法。

我相信传递图表的值会有所帮助,因为主要问题是 web.DataReader returns 索引作为 DateTime 范围,而您添加的数据如果输入 object。我相信这种不兼容性导致了您的问题。请尝试:

plt.plot(x=stock.index,y=stock['Adj Close'])
plt.plot(x=pd.to_datetime(extend['Date'],infer_datetime_format=True),y=extend['Adj Close'])
plt.show()

或者(我认为这可能会更好)我建议您将 extend 数据框附加到原始数据框。我不会使用 web.DataReader 但它应该与手动创建数据集一样工作:

df = pd.DataFrame(np.random.randint(100,200,10).tolist(),index =pd.date_range(start='2021-10-01',periods=10,freq='d')).rename(columns={0:'Adj Close'}) ##This should be the result of the DataReader
df = df.append(pd.DataFrame([180,174],index=pd.date_range(start='2021-11-15',periods=2)).rename(columns={0:'Adj Close'})) ##Data being added manually

绘制此图:

plt.plot(df['Adj Close'])
plt.show()

Returns: