Chu*_*woo 8 python pivot matplotlib pandas
我试图在 Jupyter Notebook 中使用 Pandas 绘制一个线图,比较 1960-1962 年特定州的谋杀率。
关于我现在所处位置以及我如何到达这里的一些背景信息:
我暂时只对 3 列感兴趣:州、年份和谋杀率。具体来说,我只对 5 个州感兴趣:阿拉斯加州、密歇根州、明尼苏达州、缅因州、威斯康星州。
因此,为了生成所需的表格,我这样做了(仅显示前 5 行条目):
al_mi_mn_me_wi = crimes[(crimes['State'] == 'Alaska') | (crimes['State'] =='Michigan') | (crimes['State'] =='Minnesota') | (crimes['State'] =='Maine') | (crimes['State'] =='Wisconsin')]
control_df = al_mi_mn_me_wi[['State', 'Year', 'Murder Rate']]
Run Code Online (Sandbox Code Playgroud)
从这里我使用了pivot函数
df = control_1960_to_1962.pivot(index = 'Year', columns = 'State',values= 'Murder Rate' )
Run Code Online (Sandbox Code Playgroud)
这就是我陷入困境的地方。我在执行时收到 KeyError (KeyError 是 Year):
df.plot(x='Year', y='Murder Rate', kind='line')
Run Code Online (Sandbox Code Playgroud)
当尝试只是
df.plot()
Run Code Online (Sandbox Code Playgroud)
我得到了这张奇怪的图表。
如何获得我想要的图表?
tel*_*tel 10
给定一个长(整洁)格式的数据帧,pandas.DataFrame.pivot用于转换为宽格式,可以直接使用pandas.DataFrame.plot
测试于python 3.8.11, pandas 1.3.3,matplotlib 3.4.3
import numpy as np
import pandas as pd
control_1960_to_1962 = pd.DataFrame({
'State': np.repeat(['Alaska', 'Maine', 'Michigan', 'Minnesota', 'Wisconsin'], 3),
'Year': [1960, 1961, 1962]*5,
'Murder Rate': [10.2, 11.5, 4.5, 1.7, 1.6, 1.4, 4.5, 4.1, 3.4, 1.2, 1.0, .9, 1.3, 1.6, .9]
})
df = control_1960_to_1962.pivot(index='Year', columns='State', values='Murder Rate')
# display(df)
State Alaska Maine Michigan Minnesota Wisconsin
Year
1960 10.2 1.7 4.5 1.2 1.3
1961 11.5 1.6 4.1 1.0 1.6
1962 4.5 1.4 3.4 0.9 0.9
Run Code Online (Sandbox Code Playgroud)
您可以明确告诉 Pandas(并通过它matplotlib实际进行绘图的包)您想要什么 xticks:
ax = df.plot(xticks=df.index, ylabel='Murder Rate')
Run Code Online (Sandbox Code Playgroud)
输出:
ax是一个matplotlib.axes.Axes对象,你可以通过它对你的绘图进行很多很多的自定义。
States以下是如何在 x 轴上绘制:
ax = df.T.plot(kind='bar', ylabel='Murder Rate')
Run Code Online (Sandbox Code Playgroud)
输出:
| 归档时间: |
|
| 查看次数: |
45143 次 |
| 最近记录: |