如何用列表推导式将pandas列中的州缩写替换为完整州名
现有代码的核心问题
- 嵌套循环逻辑错误:州缩写和全称是一一对应关系,不需要双重循环遍历两个列表,你的写法会把每个缩写依次替换为所有州全称,最终替换结果完全不符合预期
- 赋值逻辑错误:你往
series列表里追加的是每一次替换后的完整Series对象,最后把存放了多个Series的列表直接赋值给DataFrame的State列,会直接报错或者产出完全异常的结果
最优实现方案
用字典构建「缩写-全称」的映射关系,直接调用pandas Series自带的replace方法即可完成批量替换,不需要额外写循环,执行效率更高。
正确代码如下:
def full_states(upload_list): abr_states = ["AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY", "RI", "ON", "AB", "BC", "DC", "NB"] state_names = ["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming", "Rhode Island", "Ontario", "Alberta", "British Columbia", "Washington D.C.", "New Brunswick"] # 构建缩写到全称的映射字典 state_map = dict(zip(abr_states, state_names)) # 批量替换,不存在于映射表中的值会保留原值 upload_list["State"] = upload_list["State"].replace(state_map) return upload_list # 调用方法 upload_list = full_states(upload_list)
可选补充说明
如果你需要把不在缩写列表里的值设置为空或者其他默认值,可以把replace换成map方法,示例:
# 不在映射表的值会被设为NaN,后续可以自行填充默认值 upload_list["State"] = upload_list["State"].map(state_map)
内容的提问来源于stack exchange,提问作者Justin Benfit
相关产品推荐
相关产品推荐

