Pandas调用自定义函数报错:TypeError: object of type 'int' has no len()
错误原因分析:TypeError: object of type 'int' has no len()
核心问题
错误源于第二行np.nan的处理漏洞:
- 执行
data['col'].apply(lambda x: np.array(x))时,原始的np.nan被转换成0维numpy数组(array(nan)),此时该单元格内容不再是np.nan,而是一个包含nan值的数组对象。 - 后续的
data["col"].fillna('0')无法处理这个0维数组——fillna仅替换单元格值为np.nan的元素,不处理数组内部的nan值,也不会识别0维数组为缺失值。 - 当自定义函数
pom接收这个0维数组作为参数a时,len(a)会触发错误:0维numpy数组没有维度长度,Python将其视为类似整数的标量对象,因此抛出TypeError: object of type 'int' has no len()。
验证与修复
- 检查
data["col"].iloc[1]的类型,会发现它是numpy.ndarray而非预期的字符串或整数。 - 修复方案二选一:
调整后,# 方案1:先填充缺失值再转换数组 data["col"] = data["col"].fillna([]) # 用空列表填充nan data["col"] = data["col"].apply(lambda x: np.array(x)) # 方案2:在转换数组时直接处理nan data["col"] = data["col"].apply(lambda x: np.array(x) if pd.notna(x) else np.array([]))pom函数接收的均为有长度的数组,不会触发len()错误。
内容的提问来源于stack exchange,提问作者dsilva
相关产品推荐
相关产品推荐

