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