Python:如何访问从属列?

2024-06-26 17:11:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Sven,在此之前我要说我是Python的绝对初学者。我阅读了《从Python开始》和《Python用于数据分析》这两本书,以便至少对我所做的事情有一个基本的了解。我在下面代码中的目标是,我想显示S&;P500,过去250天的滚动平均值。表示将条形图(seaborn)与折线图(matplotlib.pyplot)相结合

在用seaborn作为柱状图绘制“S&P500数据体积”时出现了问题,因为我无法访问下属的“日期”列。我有一个想法,但我不太确定如何开始。有人有想法吗?非常感谢

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

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

 

Tags: importclosedatetimedatematplotlibasstatsseaborn
1条回答
网友
1楼 · 发布于 2024-06-26 17:11:12

您首先需要访问日期,它是索引

  • 无法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

相关问题 更多 >