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

基于邮政编码区间填充DataFrame中State列的Python技术问题

解决方法:根据邮编区间批量修改State列

先分析你之前代码的问题

  • 两次尝试都错误地把操作对象锁定在State列,但实际需要依据PostCode列的值做判断,逻辑对象完全搞混了。
  • 这个场景根本不需要用正则表达式:正则适合字符串模糊匹配,而你要的是数值区间判断,用正则属于舍近求远,还容易引入语法错误。
  • 具体错误:
    • 第一种代码里re.escape(x.startswith('6') == 4)逻辑混乱,x未定义,且startswith('6') ==4是布尔值,正则无法处理这种内容;lambda里的x是State列的值,不是邮编,完全偏离需求。
    • 第二种代码里PostCode = [range(6000,6997)]把range包装成了列表,'|'.join(PostCode)会直接报错(range不能转字符串拼接);且判断条件x in PostCode是检查State值是否在列表里,和邮编无关。

正确实现方式(无需正则,高效简洁)

方法1:布尔索引直接赋值

先确保PostCode是数值类型(如果原数据是字符串,先转换),再用条件筛选修改State:

import pandas as pd

# 转换PostCode为数值类型(处理可能的字符串格式邮编)
df['PostCode'] = pd.to_numeric(df['PostCode'], errors='coerce')

# 筛选邮编在6000-6997之间的行,将State设为"WA"
df.loc[(df['PostCode'] >= 6000) & (df['PostCode'] <= 6997), 'State'] = 'WA'

方法2:用np.where批量替换

适合需要保留原State值的场景(不符合条件的行保持原有State):

import pandas as pd
import numpy as np

df['PostCode'] = pd.to_numeric(df['PostCode'], errors='coerce')

df['State'] = np.where(
    (df['PostCode'] >= 6000) & (df['PostCode'] <= 6997),
    'WA',
    df['State']  # 不符合条件的行保留原State值
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:31:09