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

将DataFrame数据插入ClickHouse表时触发TypeError错误的排查请求

将DataFrame数据插入ClickHouse表时触发TypeError错误的排查请求

嗨,我来帮你分析下这个问题——明明表结构和DataFrame的 dtype 看起来严丝合缝,却触发了 TypeError: object of type 'float' has no len() 这个和float相关的错误,这大概率是藏在细节里的问题,给你几个排查方向:

  • 先查object类型列的真实数据类型:你看DataFrame里那几个object类型的列(比如hits_max_score、terminated_early),虽然整体dtype显示是object,但里面可能混进了NaN或者float类型的空值。Pandas里的NaN本质是float,而ClickHouse的String类型不认这个,驱动在处理的时候可能会误把它当成字符串去调用len()方法,直接就报错了。你可以跑个小代码检查:

    table_main[['scroll_id', 'hits_total_relation', 'hits_max_score', 'terminated_early']].applymap(type).value_counts()
    

    看看这些列里是不是有float类型的元素。

  • 重点盯hits_max_score列:注意到你在ClickHouse里把这个列设成了String,但这个字段本来应该是浮点数得分对吧?如果DataFrame里这个列的数值是实际的float类型(不是转成字符串的),哪怕dtype显示是object,插入时也会出问题。你可以用这段代码验证:

    table_main['hits_max_score'].apply(lambda x: isinstance(x, float)).any()
    
  • 先替换空值再试试:如果确实查到有NaN或者float空值,你可以先把这些值换成ClickHouse能接受的空字符串,比如跑这段代码:

    table_main = table_main.fillna({
        'scroll_id': '', 
        'hits_total_relation': '', 
        'hits_max_score': '', 
        'terminated_early': ''
    })
    

    处理完再执行插入命令试试。

  • 检查驱动版本是否过旧:有时候旧版本的ClickHouse Python驱动在处理Pandas DataFrame的object类型列时会有兼容性bug,你可以把正在使用的驱动(比如clickhouse-connect或者clickhouse-driver)升级到最新版,再重试插入操作。

备注:内容来源于stack exchange,提问作者TRP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 07:03:05