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

Pandas用map映射分类值时出现returning-a-view-versus-a-copy错误及NaN问题

问题原因分析

1. 映射后全为NaN的原因

你之前尝试调整loc、iloc赋值语法没有效果,是因为问题根源并非赋值方式,而是映射规则和原始数据不匹配:你写的map()字典键是1~12的整数,但原始数据month列的取值本身就是'apr'、'aug'这类字符串缩写,键值完全不匹配,找不到对应关系的取值都会被map()转为NaN。

2. SettingWithCopyWarning的原因

这个警告是因为你使用的train_set大概率是从其他DataFrame做切片筛选得到的视图对象,而非独立副本,pandas为了避免你误改原始数据触发该警告。

解决方法

修正映射字典

根据你的需求调整map的字典结构,保证键和原始值完全匹配。如果你的需求是把现有月份缩写转为数字,使用如下代码:

import pandas as pd
import numpy as np

DATA_URL = 'https://raw.githubusercontent.com/ThamuMnyulwa/bankMarketing/main/bank-additional-full.csv'
raw_dataset = pd.read_csv(DATA_URL, sep=';', skipinitialspace=True, index_col=None)
data = raw_dataset.copy()

# 字典键为原始列的字符串取值,值为你要转换的目标值
month_map = {
    'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'may': 5,
    'jun': 6, 'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10,
    'nov': 11, 'dec': 12
}
data['month'] = data['month'].map(month_map)

如果你的需求是把现有缩写转为其他格式(比如全拼、中文月份),修改字典对应的值即可。

消除SettingWithCopyWarning

在创建切片得到的子DataFrame时,显式调用.copy()生成独立副本:

# 示例:筛选训练集时加copy(),之后修改train_set不会触发警告
train_set = raw_dataset[raw_dataset['split'] == 'train'].copy()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:54:07