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

Python报错:'float'对象无isdigit属性,数据集仅含空值无浮点数

问题原因

你遇到的float类型报错,其实是因为pandas里的空值默认以NaN存储,而NaN的类型就是float,不是普通的浮点数。当循环到NaN时,直接调用item.isdigit()会直接抛出属性错误——因为float对象根本没有这个方法,你的分支判断根本没机会执行。另外,如果Vehicle Number列的类型不是字符串(比如混合了int/object类型),正常数值也可能触发类型问题。

修复方案

1. 先统一列类型并处理空值

在处理数据前,先把列转为字符串类型,同时把空值替换成空字符串:

import pandas as pd
import re

# 处理空值并转为字符串类型
df['Vehicle Number'] = df['Vehicle Number'].fillna('').astype(str)

2. 修改循环逻辑,提前过滤空值

修改循环中的判断逻辑,先跳过空字符串(原NaN转来的),避免触发类型错误:

# 替换成你实际使用的正则表达式
pattern = r'你的正则表达式'

for item in df['Vehicle Number']:
    if not item:  # 跳过空字符串
        continue
    if item.isdigit():
        if item[0] == "0":
            df['Vehicle Number'] = df['Vehicle Number'].replace([item], item[1:4])
    elif re.search(pattern, item):  
        match = re.search(pattern, item)
        idx = match.span()
        start = idx[0]+2
        end = idx[1]
            
        if item[start] == "0":
            df['Vehicle Number'] = df['Vehicle Number'].replace([item], item[start+1:end])
        else:
            df['Vehicle Number'] = df['Vehicle Number'].replace([item], item[start:end])

3. 更高效的批量处理方式(推荐)

你当前的循环每次修改整列,效率很低,建议用pandas的apply函数批量处理,更符合pandas的最佳实践:

def process_vehicle_num(num):
    if not num:
        return num
    if num.isdigit():
        # 如果开头是0,截取第1到第3位(索引1到4,左闭右开)
        return num[1:4] if num[0] == "0" else num
    match = re.search(pattern, num)
    if match:
        idx = match.span()
        start = idx[0]+2
        end = idx[1]
        return num[start+1:end] if num[start] == "0" else num[start:end]
    # 不符合规则的返回原内容
    return num

# 批量处理列
df['Vehicle Number'] = df['Vehicle Number'].fillna('').astype(str).apply(process_vehicle_num)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:32:53