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(Series+DataFrame)
python: pandas.DataFrame,如何避免keyerror?