Pandas DataFrame时间轴刻度异常:年份显示为1138而非2017
问题分析与解决方案
看起来你遇到的X轴日期异常和格式不生效的问题,主要有两个核心原因:
1. Pandas Plot未关联自定义Axes对象
你先创建了fig, ax = plt.subplots(),但调用Daten['...'].plot()时没有指定ax=ax参数——这会让Pandas自动创建一个新的Axes实例,你后续对ax的X轴格式设置完全没作用在实际绘图的轴上,这也是日期显示混乱的关键原因。
2. 日期切片格式存在歧义
你用'6/1/2017':'06/30/2017'进行切片,虽然读取数据时设置了dayfirst=True,但这种混合格式(部分带前导零,部分不带)可能引发解析歧义,建议使用标准的ISO日期格式'2017-06-01':'2017-06-30'更稳妥。
修正后的完整代码
%pylab inline import matplotlib.pyplot as plt import pandas as pd import matplotlib.dates as mdates # 读取数据,保持参数正确 Gesamt_Apr_Sept_2017 = pd.read_csv( 'Gesamtstromverbrauch_Met_01.04.2017-30.09.2017-1h.csv', sep=';', decimal=",", thousands='.', index_col=0, parse_dates=True, dayfirst=True ) # 使用ISO格式切片,避免歧义 Daten = Gesamt_Apr_Sept_2017['2017-06-01':'2017-06-30'] # 创建图表并关联Axes fig, ax = plt.subplots(figsize=(15,6)) # 关键:添加ax=ax,让Pandas使用我们定义的Axes Daten['LKHF-Strom-Met - Gesamt (kWh)'].plot(ax=ax) # 设置X轴刻度与格式 ax.xaxis.set_major_locator(mdates.DayLocator(interval=7)) ax.xaxis.set_major_formatter(mdates.DateFormatter('%a %d.%m.%Y')) # 旋转刻度标签 for tick in ax.get_xticklabels(): tick.set_rotation(90) # 可选:添加图表标题和轴标签,提升可读性 ax.set_title('Stromverbrauch Juni 2017') ax.set_ylabel('Verbrauch (kWh)') plt.tight_layout() # 自动调整布局,避免标签被截断 plt.show()
额外验证步骤
在运行绘图代码前,可以先确认你的DataFrame索引确实是正确的datetime类型:
print(Daten.index.dtype) # 应该输出 datetime64[ns] print(Daten.index[:5]) # 查看前5条索引,确认是2017年6月的日期
这样修改后,X轴应该会正确显示Thu 01.06.2017这类格式的日期,且不会出现1138年的错误了。
内容的提问来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

