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

Matplotlib X轴日期去除时间显示及NaT数据无法删除问题

解决方案:Matplotlib日期轴格式化与NaT值处理

一、解决NaT值残留问题

你执行dropna()后生成了新的DataFrame ndf_dropped_rows,但后续统计仍然调用原DataFrame ndf的列,所以NaT会继续被统计。可以用以下两种方式修正:

  • 方法1:基于过滤后的DataFrame统计
# 指定只删除目标列的空值,避免误删其他列有缺失的有效数据
ndf_dropped_rows = ndf.dropna(subset=['opening_date_clean'])
ndf_dropped_rows['opening_date_clean'].value_counts()
  • 方法2:直接在目标列过滤NaT后统计(更简洁)
ndf['opening_date_clean'].dropna().value_counts()

二、解决X轴日期显示时分秒的问题

无需将datetime类型转为字符串(会导致X轴变为分类轴,且易引入NaT绘制问题),直接通过Matplotlib的日期格式化工具设置显示格式即可:

完整示例代码:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 1. 过滤NaT并按日期排序,保证绘图顺序合理
clean_dates = ndf['opening_date_clean'].dropna()
date_counts = clean_dates.value_counts().sort_index()

# 2. 创建图表并绘图
fig, ax = plt.subplots(figsize=(10, 6))
ax.bar(date_counts.index, date_counts.values)

# 3. 设置X轴仅显示日期部分
date_formatter = mdates.DateFormatter('%Y-%m-%d')
ax.xaxis.set_major_formatter(date_formatter)

# 4. 旋转X轴标签,避免重叠
plt.xticks(rotation=45)

plt.xlabel('设备引入日期')
plt.ylabel('计数')
plt.title('设备引入日期分布')
plt.tight_layout()  # 自动调整布局,防止标签被截断
plt.show()

该方案既保留了datetime类型的轴特性(自动适配刻度),又确保X轴仅显示xxxx-xx-xx格式的日期,同时提前过滤了NaT值,不会出现在图表中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:22:38