映射数据转整数后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
相关产品推荐
相关产品推荐

