You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中读取CSV文件并转换日期列为Datetime格式时的绘图问题

解决Datetime索引转换后绘图异常的问题

我来帮你搞定这个日期转换后绘图出问题的麻烦!从你描述的情况来看,核心问题大概率出在日期解析错误(比如1969被识别成2069)和Datetime索引的格式/频率不明确上,这两个点都会导致matplotlib绘图时的X轴渲染异常。下面针对你的两种方法分别给出修正方案,同时解决年份识别错误的问题:

先解决核心痛点:年份解析错误(1969→2069)

pd.to_datetime默认会把两位年份(比如"69")解析为2069而不是1969,所以必须明确指定日期格式,或者在导入时就用正确的参数处理日期。


修正方法1:导入时直接处理日期索引

你原来的方法是先设索引再转Datetime,这里改成导入时一步到位,同时指定日期格式避免年份错误:

import pandas as pd
import matplotlib.pyplot as plt

# 关键:导入时直接解析日期列并设为索引,指定匹配你数据的日期格式
# 比如你的date列是"YYYY-MM"格式就用'%Y-%m',是"MM/YYYY"就用'%m/%Y',根据实际情况调整
BP = pd.read_csv(
    '/Users/josedelgado/PycharmProjects/Fundamentals/Building_Permits.csv',
    index_col=0,
    parse_dates=[0],
    date_parser=lambda x: pd.to_datetime(x, format='%Y-%m')
)

# 截取最近50年的数据(如果你的数据是按时间倒序排列的话,正序的话可以改成iloc[-12*50:])
BP = BP.iloc[:(12*50)]

# 先检查日期是否正确解析(比如1969年应该显示为1969-xx-xx)
print(BP.index)

# 绘图
BP.plot()
plt.ylabel('Permits')
plt.title('New Building Permits - last 50 years')
plt.show()

修正方法2:先处理日期再设索引

针对你第二种方法的问题,核心是要确保日期解析正确,并且设置索引后避免冗余列干扰:

import pandas as pd
import matplotlib.pyplot as plt

BP = pd.read_csv('/Users/josedelgado/PycharmProjects/Fundamentals/Building_Permits.csv')

# 截取数据
BP = BP.iloc[:(12*50)]

# 明确指定日期格式,解决年份识别错误
BP['Date'] = pd.to_datetime(BP['Date'], format='%Y-%m')  # 替换成你的实际日期格式

# 设置索引后,删除原Date列避免混淆
BP.set_index('Date', inplace=True)
BP.drop(columns=['Date'], errors='ignore', inplace=True)

# 直接绘制Permits列,matplotlib会自动识别Datetime索引作为X轴
BP['Permits'].plot()
plt.ylabel('Permits')
plt.title('New Building Permits - last 50 years')
plt.show()

额外排查点(如果还是有问题)

如果按照上面的方法还是绘图异常,可以检查这几个点:

  • 检查Datetime索引的频率:如果你的数据是月度/季度数据,可以手动设置频率,比如BP.index.freq = 'MS'(月度起始),这样matplotlib会正确渲染X轴刻度。
  • 检查重复索引:用print(BP.index.is_unique)验证,如果有重复日期,需要先聚合数据,比如BP = BP.groupby(BP.index).mean()。
  • 检查缺失值:缺失的日期也会导致绘图断层,可以用BP = BP.asfreq('MS')填充缺失值(根据数据频率调整)。

内容的提问来源于stack exchange,提问作者josed08

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 13:07:27