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

使用pandas.to_datetime与seaborn绘图遇类型错误及全黑显示问题

美国国债收益率热图问题解决指南

问题根源拆解

  1. TypeError(Timestamp转float失败):seaborn/Plotly热力图仅接受纯数值型的二维数据矩阵,若将pd.Timestamp留在数据列或错误作为数值传入,必然触发类型转换错误。
  2. 热图全黑/显示异常:多数是错误将Timestamp转为超大整数(如毫秒级时间戳,数值达1e12级别),导致收益率的个位数数值被颜色映射完全压缩,或未清理缺失值/非数值数据。

分步解决方法

1. 正确预处理数据

先把数据整理成「日期为行索引,国债期限为列,收益率为数值」的纯数值矩阵:

import pandas as pd

# 读取美国财政部2022年国债收益率数据(假设为CSV格式)
df = pd.read_csv('treasury_yields_2022.csv')
# 转换日期为Timestamp并设为行索引
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date')
# 强制所有收益率列转为数值型,无法转换的设为NaN
df = df.apply(pd.to_numeric, errors='coerce')
# 清理含缺失值的行(避免绘图时出现异常)
df = df.dropna(axis=0, how='any')

2. 修复Seaborn热图问题

核心是传入纯数值矩阵+强制颜色映射范围,同时转置数据让展示更直观:

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(12, 8))
# 转置df:把期限放Y轴,日期放X轴,更符合阅读习惯
sns.heatmap(
    df.T,
    cmap='coolwarm',  # 用冷暖色区分高低收益率
    vmin=0, vmax=5,   # 2022年国债收益率大致在0-5区间,强制锁定颜色范围
    annot=False,      # 不需要显示具体数值可设为False,减少视觉杂乱
    cbar=True
)
plt.title('2022年美国国债收益率曲线热图')
plt.xlabel('日期')
plt.ylabel('国债期限')
plt.xticks(rotation=45)  # 旋转X轴日期标签,避免重叠
plt.show()

3. 修复Plotly热图问题

Plotly热力图对日期格式更敏感,需将Timestamp转为字符串标签,同时指定数值范围:

方法1:用px.density_heatmap(更简洁)

import plotly.express as px

# 转成长格式数据适配Plotly
df_long = df.reset_index().melt(id_vars='Date', var_name='期限', value_name='收益率')

fig = px.density_heatmap(
    df_long,
    x='Date',
    y='期限',
    z='收益率',
    range_color=[0, 5],  # 锁定颜色范围
    color_continuous_scale='RdYlBu_r'
)
fig.update_layout(
    title='2022年美国国债收益率曲线热图',
    xaxis_title='日期',
    yaxis_title='国债期限'
)
fig.show()

方法2:用go.Heatmap(更灵活)

import plotly.graph_objects as go

fig = go.Figure(data=go.Heatmap(
    z=df.values,  # 纯数值矩阵
    x=df.index.strftime('%Y-%m-%d'),  # 将Timestamp转为字符串日期标签
    y=df.columns,
    zmin=0, zmax=5,
    colorscale='RdYlBu_r'
))
fig.update_layout(
    title='2022年美国国债收益率曲线热图',
    xaxis_title='日期',
    yaxis_title='国债期限'
)
fig.show()

避坑总结

  • 绝对不要把pd.Timestamp作为热力图的数值数据,仅可作为索引或转换为字符串标签使用。
  • 必须确保收益率列是纯数值型,提前清理缺失值和非数值内容。
  • 强制指定颜色映射的数值范围是解决热图全黑/颜色异常的关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:36:26