我有一个时间序列,我想逐年绘制。我希望数据是每天的,但轴每个月都显示为“Jan”、“Feb”等。
目前我可以获得每日数据,但轴是 1-366(一年中的一天)。
或者我可以将月轴设为 1、2、3 等(通过将索引更改为 df.index.month),但是数据是每月的。
如何将年轴中的日期转换为月份?或者我该怎么做?
代码显示每日数据,但轴错误:
# import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# create fake time series dataframe
index = pd.date_range(start='01-Jan-2012', end='31-12-2018', freq='D')
data = np.random.randn(len(index))
df = pd.DataFrame(data, index, columns=['Data'])
# pivot to get by day in rows, then year in columns
df_pivot = pd.pivot_table(df, index=df.index.dayofyear, columns=df.index.year, values='Data')
df_pivot.plot()
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.show()
Run Code Online (Sandbox Code Playgroud)
这可能是一个非常愚蠢的问题,但是当使用 .plot() 绘制 Pandas DataFrame 时,它非常快并生成具有适当索引的图表。一旦我尝试将其更改为条形图,它似乎就失去了所有格式并且索引变得疯狂。为什么会这样呢?有没有一种简单的方法来绘制与折线图格式相同的条形图?
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
df = pd.DataFrame()
df['Date'] = pd.date_range(start='01/01/2012', end='31/12/2018')
df['Value'] = np.random.randint(low=5, high=100, size=len(df))
df.set_index('Date', inplace=True)
df.plot()
plt.show()
df.plot(kind='bar')
plt.show()
Run Code Online (Sandbox Code Playgroud)
更新:为了进行比较,如果我获取数据并将其放入 Excel,然后创建一个线图和一个条形图(“列”)图,它会立即转换该图并保留线图的轴标签。如果我尝试用 Python 生成许多(数千个)带有多年日常数据的条形图,这需要很长时间。在 Python 中是否有等效的方法来执行此 Excel 转换?
我只需要重命名数据框中的最后一列,问题是有很多同名列(这是有原因的),因此我无法在线使用其他示例中的代码。有没有一种方法可以使用仅隔离最后一列的特定内容?
我试图做这样的事情
df.rename(columns={df.columns[-1]: 'Test'}, inplace=True)
但这意味着所有具有相同标题的列都更改为“测试”,而我只希望最后一个更改。
我有点需要类似的东西,df.columns[-1] = 'Test' 但这是行不通的。