为何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
相关产品推荐
相关产品推荐

