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

为何Pandas的map函数总是将整数转换为float64类型?

解决Pandas map后整数转float64及NaN转换报错问题

问题根源

当用map做字典映射时,如果DataFrame里有找不到匹配的serial值,就会生成NaN。而Pandas的普通整数类型(int)没法存储缺失值,所以自动把列类型转成了float64——因为float类型支持NaN。直接用astype(int)转的时候,NaN属于非有限值,自然会报错。

可行解决方案

1. 用支持缺失值的整数类型(最推荐)

Pandas有个专门的nullable整数类型Int64(注意首字母大写),既能存整数,又能兼容NaN:

all_serials = {phone["serial"]: int(phone["id"]) for phone in all_phones}
df["id"] = df["serial"].map(all_serials).astype("Int64")

2. 先填缺失值再转类型

如果业务允许把无匹配的项换成某个占位整数(比如-1、0),可以先填充NaN再转普通int:

all_serials = {phone["serial"]: int(phone["id"]) for phone in all_phones}
# 这里用-1当占位符,根据自己的业务场景换就行
df["id"] = df["serial"].map(all_serials).fillna(-1).astype(int)

3. 用replace代替map(避免生成NaN)

要是不想出现NaN,直接给无匹配项设默认值,用replace更合适:

all_serials = {phone["serial"]: int(phone["id"]) for phone in all_phones}
# 无匹配时默认用-1,可自行调整
df["id"] = df["serial"].replace(all_serials, default=-1).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:22:10