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

按条件修改medianIncome列值时触发错误,寻求解决方法

问题:截断medianIncome列的数值范围

需求:将medianIncome列中≤0.4999的值修改为0.4999,≥15.0001的值修改为15.0001。

样本数据

id  medianHouseValue  housingMedianAge  totalBedrooms  totalRooms  households  population  medianIncome
0        23           113.903              31.0          543.0      2438.0      481.0      1016.0        1.7250
1        24            99.701              56.0          337.0      1692.0      328.0       856.0        2.1806
2        26           107.500              41.0          123.0       535.0      121.0       317.0        2.4038
3        27            93.803              53.0          244.0      1132.0      241.0       607.0        2.4597
4        28           105.504              52.0          423.0      1899.0      400.0      1104.0        1.8080

尝试的代码及错误

第一次尝试

housing.loc[housing['medianIncome'] > 15.0001, 'medianIncome'] = 15.0001
housing.loc[housing['medianIncome'] < 0.4999, 'medianIncome'] = 0.4999

错误信息:

AttributeError: 'list' object has no attribute 'loc'

第二次尝试

housing['medianIncome'] = np.where(housing['medianIncome'] >= 15.0001, housing['medianIncome'])
housing['medianIncome'] = np.where(housing['medianIncome'] <= 0.4999, housing['medianIncome'])

错误信息:

TypeError: list indices must be integers or slices, not str

解决方案

错误根源

两个错误都是因为housing是Python列表而非pandas DataFrame。列表不支持loc属性,也不能用字符串索引取列,只有DataFrame才能实现这些操作。

步骤1:将列表数据转为pandas DataFrame

假设你的数据以列表形式存储,先转换为DataFrame:

import pandas as pd

# 按实际数据结构整理列表,这里以样本数据为例
data = [
    [0, 23, 113.903, 31.0, 543.0, 2438.0, 481.0, 1016.0, 1.7250],
    [1, 24, 99.701, 56.0, 337.0, 1692.0, 328.0, 856.0, 2.1806],
    [2, 26, 107.500, 41.0, 123.0, 535.0, 121.0, 317.0, 2.4038],
    [3, 27, 93.803, 53.0, 244.0, 1132.0, 241.0, 607.0, 2.4597],
    [4, 28, 105.504, 52.0, 423.0, 1899.0, 400.0, 1104.0, 1.8080]
]

columns = ['id', 'medianHouseValue', 'housingMedianAge', 'totalBedrooms', 'totalRooms', 'households', 'population', 'medianIncome']

housing = pd.DataFrame(data, columns=columns)

步骤2:截断数值范围

推荐使用pandas内置的clip方法,专门用于数值截断,代码更简洁:

housing['medianIncome'] = housing['medianIncome'].clip(lower=0.4999, upper=15.0001)

如果坚持用loc或np.where,也可以这样写:

用loc实现

housing.loc[housing['medianIncome'] > 15.0001, 'medianIncome'] = 15.0001
housing.loc[housing['medianIncome'] < 0.4999, 'medianIncome'] = 0.4999

用np.where实现

注意np.where需要三个参数:条件、满足条件时的值、不满足条件时的值:

import numpy as np

housing['medianIncome'] = np.where(housing['medianIncome'] >= 15.0001, 15.0001, housing['medianIncome'])
housing['medianIncome'] = np.where(housing['medianIncome'] <= 0.4999, 0.4999, housing['medianIncome'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:30:36