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
相关产品推荐
相关产品推荐

