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

DataFrame列格式修正:解决float类型无len()方法的TypeError问题

问题解决:DataFrame列格式修正时触发TypeError

错误原因

你的DataFrame目标列中存在float类型的值(通常是缺失值NaN),而len()函数仅支持字符串/序列类型,因此调用len(x)时触发TypeError: object of type 'float' has no len()。

解决方法

步骤1:统一列类型为字符串并处理缺失值

先将列转换为字符串类型,同时把NaN(转换后会变成字符串"nan")替换为空字符串(或根据需求保留,比如用fillna('')直接填充缺失值)。

步骤2:修正格式(两种可选方案)

方案一:调整apply逻辑

# 转换为字符串并处理NaN
df['col'] = df['col'].astype(str).replace('nan', '')
# 仅对8位无连字符的字符串插入连字符
df['col'] = df['col'].apply(lambda x: x[:5] + '-' + x[5:] if len(x) == 8 and '-' not in x else x)

方案二:使用正则替换(更简洁稳健)

用正则匹配8位无连字符的字符串,直接在第5位后插入连字符:

# 转换为字符串并处理NaN
df['col'] = df['col'].astype(str).replace('nan', '')
# 正则替换匹配格式
df['col'] = df['col'].str.replace(r'^([^\-]{5})([^\-]{3})$', r'\1-\2', regex=True)

说明

  • 原代码的len(x) != 9条件不够精准,改为len(x) == 8更贴合需求(仅处理缺失连字符的8位字符串)。
  • 如果需要保留原始缺失值(NaN),可以将astype(str).replace('nan', '')替换为fillna('').astype(str)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:02:39