Python:如何访问从属列?

问题描述

我是 sven,在此之前要说我是 Python 的绝对初学者。我阅读了“从 Python 开始”和“Python 进行数据分析”这本书,至少对我在做什么有一个基本的了解。我使用下面代码的目标是,我想用过去 250 天的滚动平均值显示 S&P500 的成交量。表示将条形图(seaborn)与折线图(matplotlib.pyplot)结合起来。

在绘制“S&P500 数据按卷使用 seaborn 作为条形图时出现问题,因为我无法访问从属列“日期”。我有一个想法,但我不太确定如何开始。有人有想法吗?非常感谢。

我的方法是介于索引、分层和分组之间。

           Open   High    Low  Close  Adj Close     Volume
Date                                                        
1993-02-01 438.78 442.52 438.78 442.52     442.52  238570000
1993-02-02 442.52 442.87 440.76 442.55     442.55  271560000
1993-02-03 442.56 447.35 442.56 447.20     447.20  345410000
1993-02-04 447.20 449.86 447.20 449.56     449.56  351140000
1993-02-05 449.56 449.56 446.95 448.93     448.93  324710000

import pandas as pd
import numpy as np
import yfinance as yf
from datetime import datetime,timedelta
import matplotlib.pyplot as plt
import seaborn as sns

yesterday = datetime.Now()-timedelta(1)
datetime.strftime(yesterday,"%Y-%m-%d")

SP500 = yf.download('^GSPC',start='1993-02-01',end=yesterday)
pd.set_option('display.float_format',lambda x: '%.2f' % x)

SP500f = SP500.head()
SP500f.groupby

#Stats_Vol = SP500["Volume"]
#Date = SP500["Date"]
#print(Stats_Vol)
#print(Stats_Vol.describe())

#sns.barplot(data=SP500,y="Volume")
#print(Stats_Vol.rolling(250).mean().plot())
plt.show()

 

解决方法

首先你需要访问作为索引的Date

  • 可以reset_index()把它变成一列
  • 有两个日期要绘制,因此重新采样,然后创建了一个新列,用于在 x 轴上显示格式
import pandas as pd
import numpy as np
import yfinance as yf
from datetime import datetime,timedelta
import matplotlib.pyplot as plt
import seaborn as sns

yesterday = datetime.now()-timedelta(1)
fig,ax = plt.subplots()

SP500 = yf.download('^GSPC',start='1993-02-01',end=yesterday)

# too many days,resample
# do a display format for date (which is the index)
sns.barplot(data=SP500.loc[:,"Volume"]\
            .resample("Y").mean().to_frame()\
            .assign(GDate=lambda dfa: dfa.index.strftime("%Y")),x="GDate",y="Volume",ax=ax)
# rotate the labels
l = ax.set_xticklabels(ax.get_xticklabels(),rotation = 90)

enter image description here