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

映射数据转整数后df['country_code']全为NaN问题求助

问题排查与修复方案

核心错误点

  • replace语法不合法:第一行df['country_code'].replace(['?'], )缺少替换目标值,语法报错,且无法完成?的替换操作。
  • map导致非映射值全变NaN:使用map(country_code_map)时,所有不在字典内的字段(包括你想替换的空值、未收录的国家代码)都会被转为NaN,这是最终全NaN的核心原因。
  • 均值调用错误:最后一行df['country_code'].mean是方法对象,不是实际均值,必须加括号df['country_code'].mean()才能获取计算结果。
  • 处理逻辑顺序混乱:先替换?为空,再执行map,此时空值已被转为NaN,后续替换空字符串为均值的操作完全无效。

修复后的代码

import numpy as np
import pandas as pd

# 统一将?替换为NaN,便于后续缺失值处理
df['country_code'] = df['country_code'].replace(['?'], np.nan)

country_code_map = {'AUS': 1, 'USA': 2, 'CAN': 3, 'BGD': 4, 'BRZ': 5, 'JP': 6, 'ID': 7, 'HR': 8, 'CH': 9, 'FRA': 10, 'FIN': 11}

# 执行映射,若需保留未收录的国家代码,可将map替换为replace
df['country_code'] = df['country_code'].map(country_code_map)

# 计算均值(自动忽略NaN)
code_mean = df['country_code'].mean()

# 将所有NaN替换为均值
df['country_code'] = df['country_code'].fillna(code_mean)

额外提示

如果原数据存在未收录的有效国家代码,不想让它们被转为NaN,可把map替换为replace——replace只会替换字典内匹配的值,不匹配的会保留原值:

df['country_code'] = df['country_code'].replace(country_code_map)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:24:24