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

基于state列生成region列时所有值均为None的问题排查

问题分析与解决

方法一:apply函数实现的错误修正

你的代码存在两个核心问题:

  1. 变量名拼写不一致:定义的地区列表是Mid_West,但构建region列表时误写为Midwest,导致该地区的州列表未被正确传入,所有匹配逻辑失效。
  2. apply的args参数格式错误:args要求传入元组,你写的args=(region)会把列表拆成6个独立参数传递,而非将整个列表作为单个参数传入函数。

修正后的代码:

def get_region(state, region_list):
    if state in region_list[0]:
        return 'New_England'
    elif state in region_list[1]:
        return 'Mid_Atlantic'
    elif state in region_list[2]:
        return 'South'
    elif state in region_list[3]:
        return 'Midwest'
    elif state in region_list[4]:
        return 'Southwest'
    elif state in region_list[5]:
        return 'West'
    else:
        return None

New_England = ['CT', 'ME', 'MA', 'NH', 'RI', 'VT']
Mid_Atlantic =  ['DC', 'DE', 'MD', 'NJ', 'NY', 'PA']
South = ['AL', 'AR', 'FL', 'GA', 'KY', 'LA', 'MS', 'MO', 'NC', 'SC', 'TN', 'VA', 'WV']
Mid_West = ['IL', 'IN', 'IA', 'KS', 'MI', 'MN', 'NE', 'ND', 'OH', 'SD', 'WI']
Southwest = ['AZ', 'NM','OK', 'TX']
West = ['AK', 'CA', 'CO', 'HI', 'ID', 'MT', 'NV', 'OR', 'UT', 'WA', 'WY']

# 修正变量名拼写错误
region = [New_England, Mid_Atlantic, South, Mid_West, Southwest, West]
# args传入元组,确保region列表作为单个参数传递
beersmerged['region'] = beersmerged['state'].apply(get_region, args=(region,))
beersmerged.head()

方法二:np.select实现的错误修正

同样存在变量名拼写错误,且np.select未指定default参数,当所有条件不匹配时会默认返回0。修正后:

import numpy as np

New_England = ['CT', 'ME', 'MA', 'NH', 'RI', 'VT']
Mid_Atlantic =  ['DC', 'DE', 'MD', 'NJ', 'NY', 'PA']
South = ['AL', 'AR', 'FL', 'GA', 'KY', 'LA', 'MS', 'MO', 'NC', 'SC', 'TN', 'VA', 'WV']
Mid_West = ['IL', 'IN', 'IA', 'KS', 'MI', 'MN', 'NE', 'ND', 'OH', 'SD', 'WI']
Southwest = ['AZ', 'NM','OK', 'TX']
West = ['AK', 'CA', 'CO', 'HI', 'ID', 'MT', 'NV', 'OR', 'UT', 'WA', 'WY']

class_regions ={'New_England':New_England,'Mid_Atlantic':Mid_Atlantic,'South':South,'Midwest':Mid_West,'Southwest':Southwest,'West':West}
# 生成条件列表和对应值列表
conditions = [beersmerged['state'].isin(vals) for vals in class_regions.values()]
values = list(class_regions.keys())
# 指定default参数,避免无匹配时返回0
beersmerged['region']=np.select(conditions, values, default=None)
beersmerged.head()

更高效的实现方式

可以先构建州→地区的反向映射字典,再用map方法实现,比上述两种方法更高效:

# 构建州到地区的映射字典
state_to_region = {}
regions = {
    'New_England': ['CT', 'ME', 'MA', 'NH', 'RI', 'VT'],
    'Mid_Atlantic': ['DC', 'DE', 'MD', 'NJ', 'NY', 'PA'],
    'South': ['AL', 'AR', 'FL', 'GA', 'KY', 'LA', 'MS', 'MO', 'NC', 'SC', 'TN', 'VA', 'WV'],
    'Midwest': ['IL', 'IN', 'IA', 'KS', 'MI', 'MN', 'NE', 'ND', 'OH', 'SD', 'WI'],
    'Southwest': ['AZ', 'NM','OK', 'TX'],
    'West': ['AK', 'CA', 'CO', 'HI', 'ID', 'MT', 'NV', 'OR', 'UT', 'WA', 'WY']
}

for region_name, states in regions.items():
    for state in states:
        state_to_region[state] = region_name

# 直接映射生成region列
beersmerged['region'] = beersmerged['state'].map(state_to_region)
beersmerged.head()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:45:17