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

Posted

技术标签:

【中文标题】Python - Pandas Dataframe 以正确的方式合并两个数据框【英文标题】:Python - Pandas Dataframe merge two dataframes in the correct way 【发布时间】:2021-12-25 13:14:25 【问题描述】:

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

这是我的代码:

   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()

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

【问题讨论】:

【参考方案1】:

我相信传递绘图的值会有所帮助,因为主要问题是 web.DataReader 将索引作为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()

返回:

【讨论】:

以上是关于Python - Pandas Dataframe 以正确的方式合并两个数据框的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas -- DataFrame

Python pandas DataFrame的切片取值

利用Python进行数据分析:Pandas(Series+DataFrame)

python: pandas.DataFrame,如何避免keyerror?

小白学 Python 数据分析:Pandas 数据结构 DataFrame

Python数据分析pandas之dataframe初识