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

DataFrame列浮点数转整数:函数内转换失效问题排查

解决混合类型Series的数值转int及统一为字符串类型的问题

我来帮你拆解并解决这个问题,你遇到的核心问题有两个:一是自定义函数无返回值的原因,二是如何正确处理混合类型的Series以满足关联需求。

为什么你的convert_to_int函数没有返回值?

这是因为你的函数里缺少return语句!Python中,函数如果没有显式返回值,默认会返回None。你在try块里计算了int(pd.to_numeric(cell)),但没有把这个结果返回;except块里也只是引用了cell,同样没有返回。

修正后的函数应该加上return:

def convert_to_int(cell):
    try:
        # 先通过pd.to_numeric识别数值(包括字符串形式的数值),再转成int
        return int(pd.to_numeric(cell))
    except ValueError:
        # 非数值类型的内容,直接返回原值
        return cell

现在调用convert_to_int(s[3])就会返回3985500了。

完整的Series处理方案

结合apply方法和最终转为字符串类型的需求,完整代码如下:

import pandas as pd

# 你的示例Series
s = pd.Series([3985500,'3985500',3985500.0,'3985500.0','3985500A','3985500B'])

def convert_to_int(cell):
    try:
        return int(pd.to_numeric(cell))
    except ValueError:
        return cell

# 应用转换函数,再统一转为字符串类型
processed_series = s.apply(convert_to_int).astype(str)

# 查看结果
print(processed_series)

执行后输出的结果会是:

0    3985500
1    3985500
2    3985500
3    3985500
4    3985500A
5    3985500B
dtype: object

为什么不用astype(int, errors='ignore')?

你提到的astype(int, errors='ignore')有两个问题:

  1. 它只会尝试直接转换元素类型,对于字符串形式的浮点数(比如'3985500.0')无法直接转int,会保留原字符串;
  2. 浮点数转int后,pandas可能会以科学计数法显示(比如3.9855e+06),虽然实际值是对的,但不符合你想要的整数格式。

而我们的方法通过pd.to_numeric先统一识别所有数值形式的内容(包括整数、浮点数、字符串格式的数值),再转成int,最后统一为字符串类型,完全满足你关联时键匹配的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:12:58