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

DataFrame使用apply(len)报错float无len(),同类型name列正常求排查

问题原因与解决方案

你遇到的这个问题其实挺常见的——虽然item_description列的类型显示是object,但它里面混进了float类型的NaN缺失值,这就是触发TypeError: object of type 'float' has no len()的核心原因。

为什么name列能正常执行?

name列没报错,大概率是因为它里面没有缺失值(NaN),所有元素都是标准的字符串类型,自然可以直接用len()计算长度。而item_description列存在缺失时,pandas会默认用float类型的NaN来填充这些空位,这就导致列的整体类型还是object,但内部元素同时包含字符串和float两种类型,当apply(len)遍历到NaN时,自然就会报错。

验证猜测的方法

你可以先跑下面的代码确认一下:

# 查看item_description列里的所有元素类型
print(df['item_description'].apply(type).unique())
# 统计缺失值的数量
print(df['item_description'].isna().sum())

如果输出里有<class 'float'>,且缺失值数量大于0,就坐实了这个原因。

解决办法

有两种简单的处理方式:

  • 方式一:用空字符串填充缺失值
    把NaN替换成空字符串,这样计算长度时会返回0,不会报错:
    df['desc_len'] = df['item_description'].fillna('').apply(len)
    
  • 方式二:用lambda表达式判断处理
    直接在apply里判断元素是否为NaN,是则返回你想要的默认值(比如0),否则计算长度:
    import pandas as pd
    df['desc_len'] = df['item_description'].apply(lambda x: len(x) if pd.notna(x) else 0)
    

内容的提问来源于stack exchange,提问作者Jaskaran Singh Puri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:55:39