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

Dash DatePickerRange绑定Graph报TypeError无效类型比对错误如何解决

问题修复方案

你遇到的类型比对报错由4处代码问题共同导致,按以下步骤修改即可解决:

1. 修正DataFrame日期列转换逻辑

你写的循环会将整列Date覆盖为最后一行的日期值,完全不符合转换预期,使用pandas内置方法批量转换即可:

import pandas as pd
# 统一将Date列转为datetime类型,可省略format参数让pandas自动识别格式
dfEconomic['Date'] = pd.to_datetime(dfEconomic['Date'], format="%Y-%m-%d")

2. 修正回调参数顺序与触发逻辑

Dash回调的传参规则为:所有Input参数按定义顺序在前,所有State参数按定义顺序在后,你当前的参数顺序完全错位,同时可根据你的需求选择更新触发逻辑:

方案A:点击提交按钮才更新图表(符合你加提交按钮的设计初衷)

@app.callback(
    Output('graph_2', 'figure'),
    Input('submit_button', 'n_clicks'),
    # 日期选择器设为State,只有点击按钮才会读取值
    [State('date-picker', 'start_date'),
    State('date-picker', 'end_date')],
    prevent_initial_call=True
)
def update_graph_2(n_clicks, start_date, end_date):
    # 将日期选择器返回的字符串转为datetime,和DataFrame列类型统一
    start_dt = datetime.strptime(start_date, "%Y-%m-%d")
    end_dt = datetime.strptime(end_date, "%Y-%m-%d")
    # 先过滤出符合区间的数据集
    filter_df = dfEconomic[(dfEconomic['Date'] >= start_dt) & (dfEconomic['Date'] <= end_dt)]
    fig = {
        'data': [{
            'x': filter_df['Date'],
            'y': filter_df["Amount [DKK]"],
            'type': 'bar'
        }]
    }
    return fig

方案B:选择日期后自动更新图表(不需要点击提交)

直接移除提交按钮相关的State配置即可:

@app.callback(
    Output('graph_2', 'figure'),
    [Input('date-picker', 'start_date'),
    Input('date-picker', 'end_date')]
)
def update_graph_2(start_date, end_date):
    start_dt = datetime.strptime(start_date, "%Y-%m-%d")
    end_dt = datetime.strptime(end_date, "%Y-%m-%d")
    filter_df = dfEconomic[(dfEconomic['Date'] >= start_dt) & (dfEconomic['Date'] <= end_dt)]
    fig = {
        'data': [{
            'x': filter_df['Date'],
            'y': filter_df["Amount [DKK]"],
            'type': 'bar'
        }]
    }
    return fig

3. 额外注意

你原代码中给x赋值的是过滤后的整行DataFrame,实际应该取过滤后的Date列,且y值也要对应过滤后的数据集,否则会出现x、y长度不匹配的问题。


内容的提问来源于stack exchange,提问作者Søren T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:45:01