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

报错AttributeError: 'int'对象无split属性的排查(DataFrame场景)

问题排查与解决方法

一、报错原因分析

尽管ADDRESS列整体数据类型显示为object,但列内部混入了整数(int)类型的元素。object类型列允许存储多种数据类型(字符串、整数等),因此即使列类型是object,仍可能存在无法调用split()方法的int值,从而触发报错。

二、排查验证步骤

先确认列中是否存在非字符串类型元素:

# 筛选出ADDRESS列中类型不是字符串的行
non_str_rows = df[df['ADDRESS'].apply(lambda x: not isinstance(x, str))]
print(non_str_rows)

# 统计列内各数据类型的分布
type_counts = df['ADDRESS'].apply(type).value_counts()
print(type_counts)

三、解决方案

方法1:强制统一转为字符串

先将列内所有元素转为字符串,消除类型差异:

import numpy as np

# 强制转换ADDRESS列为字符串类型
df['ADDRESS'] = df['ADDRESS'].astype(str)
# 再执行州名提取逻辑
df["STATE"] = df["ADDRESS"].map(lambda x: state if (state := x.split()[-1]) in state_lists else np.nan)

注:若原int值为无效地址(如0、空值转换后的整数),转字符串后可后续单独过滤。

方法2:处理时先判断元素类型

在lambda表达式中先校验类型,避免对int执行split操作:

import numpy as np

df["STATE"] = df["ADDRESS"].map(lambda x: state if isinstance(x, str) and (state := x.split()[-1]) in state_lists else np.nan)

方法3:正则匹配州名(更可靠)

仅取地址最后一个词的逻辑易出错(比如最后是邮编),用正则匹配州名更精准:

import re
import numpy as np

# 生成匹配州名的正则(匹配完整单词,忽略大小写)
state_pattern = re.compile(r'\b(' + '|'.join(re.escape(s) for s in state_lists) + r')\b', flags=re.IGNORECASE)

def extract_state(address):
    if not isinstance(address, str):
        return np.nan
    match = state_pattern.search(address)
    return match.group(1) if match else np.nan

df["STATE"] = df["ADDRESS"].apply(extract_state)

内容的提问来源于stack exchange,提问作者Engr. Chinwe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:52:10