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

使用Python和pandas创建整数类型新列时报错的问题求助

问题原因

你遇到的问题来自两个非常容易踩的坑:

  • 列名拼写不一致:创建新列时你写的列名是avg_amout(amount拼写漏了字母n),后续做类型转换时操作的是拼写正确的avg_amount列,本质是在操作一个不存在的列,必然会抛错。
  • pandas的类型自动转换机制:哪怕你赋值用的全是整数值,只要列表推导式生成的结果里混入了空值、非整数内容,或者旧版pandas里整数列需要存储NaN(普通int类型不支持存储空值),就会自动把整列类型转为float64或者object类型,不会保留整数类型。
解决方案

写法1:创建列时直接指定整数类型

修正列名拼写后,直接在生成列时指定pandas的可空整数类型Int64(大写I,支持存储空值,不会自动转成float),不需要后续二次转换:

import pandas as pd

data['avg_amount'] = pd.array(
    [
        8000 if x == '$1,000 - $15,000'
        else 3000000 if x == '$1,000,001 - $5,000,000'
        else 750000
        for x in data['amount']
    ],
    dtype="Int64"
)

如果你用的pandas版本较低不支持可空整数类型,先确认列内没有无法转换的异常值,再转成普通int:

# 先排查异常值
print(data["avg_amount"].unique())
# 确认无异常后转换
data["avg_amount"] = data["avg_amount"].astype(int)

写法2:用pandas原生映射替代列表推导式(更稳妥)

多层三元表达式的列表推导式很容易出现隐式的类型问题,用replace做映射可读性更高,也不容易出类型异常:

amount_map = {
    "$1,000 - $15,000": 8000,
    "$1,000,001 - $5,000,000": 3000000
}
data["avg_amount"] = data["amount"].replace(amount_map).fillna(750000).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:06:34