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

Pandas浮点型列转字符串并检测子串存在性报错解决

解决浮点型CNPJ列匹配特定子串并设置对应Porte值的问题

你遇到的TypeError: cannot convert the series to <class 'int'>错误,本质是因为浮点型的CNPJ值在转换为int时遇到了精度或范围问题——比如过长的CNPJ数值作为浮点数存储时,已经丢失了部分精度,或者超出了常规int类型的取值范围,导致无法正常转换。

下面给你两种可行的解决方法:

方法一:直接处理字符串(推荐)

跳过转int的步骤,把浮点型直接转为字符串后,去掉可能出现的.0后缀,再检查是否包含目标子串:

# 将CNPJ转为字符串,移除浮点转字符串后带的.0结尾
cnpj_clean = df['cnpj'].astype(str).str.replace(r'\.0$', '', regex=True)
# 筛选匹配'0001'的行,设置Porte为'A'
df.loc[cnpj_clean.str.contains('0001'), 'Porte'] = 'A'

这种方法避免了整数转换的风险,而且处理逻辑更直接,尤其适合已经存在精度丢失的浮点型CNPJ数据。

方法二:使用Nullable整数类型转换

如果你确定所有CNPJ都是合法的整数(没有小数部分),可以用pandas的Int64类型(注意大写I)来转换,它支持更大的数值范围,能避免普通int的溢出问题:

# 先转成支持大数值的Nullable整数,再转字符串匹配
df.loc[df['cnpj'].astype('Int64').astype(str).str.contains('0001'), 'Porte'] = 'A'

额外提醒

  • 尽量不要用浮点型存储CNPJ这类标识性数字,后续导入数据时直接指定为字符串类型,能从根源避免精度丢失和转换问题。
  • 赋值时优先使用df.loc[筛选条件, 列名] = 值的格式,这是pandas官方推荐的写法,能避免潜在的SettingWithCopyWarning警告。

执行上述任意一种方法后,你就能得到预期的结果:

cnpj Porte
0 453232000125 A
1 11543123000156 A
2 345676
3 121234561023456

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:28:15