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

如何将州-邮编字典的值有效映射到DataFrame列?解决返回NaN问题

问题分析与解决方案

你的代码返回NaN的核心原因是字典推导式生成的映射键和DataFrame中的邮编不匹配,结合你的数据场景,分两种情况解决:

1. 你的temp字典结构是「州名: 单个邮编」

比如:

temp = {'Sachsen': '38440', 'Niedersachsen': '20867'}

你原来的推导式{item: k for k, v in temp.items() for item in v}会把单个邮编字符串拆成单个字符(比如'38440'会被遍历为'3'、'8'、'4'、'4'、'0'),生成的字典键是单个字符,自然和DataFrame中完整的邮编匹配不上。

正确写法

直接反转字典的键值对,生成「邮编: 州名」的映射:

# 生成邮编到州的映射字典
zip_to_state = {v: k for k, v in temp.items()}
# 映射到DataFrame
df['states'] = df['zipcode'].map(zip_to_state)

2. 你的temp字典结构是「州名: 邮编列表」

比如:

temp = {'Sachsen': ['38440', '38441'], 'Niedersachsen': ['20867', '20868']}

你原来的推导式逻辑是对的,但需要确保DataFrame中zipcode的类型和字典中邮编的类型完全一致:

  • 如果字典里的邮编是字符串,而DataFrame里的是整数,需要转类型:
    df['zipcode'] = df['zipcode'].astype(str)
    
  • 如果字典里的邮编是整数,而DataFrame里的是字符串,转成整数:
    df['zipcode'] = df['zipcode'].astype(int)
    

完整代码示例

# 生成邮编到州的映射字典
zip_to_state = {item: k for k, v in temp.items() for item in v}
# 统一类型后映射
df['zipcode'] = df['zipcode'].astype(str)  # 根据实际情况调整类型
df['states'] = df['zipcode'].map(zip_to_state)

额外排查点

  • 检查temp字典的实际结构,确认每个州对应的是单个邮编还是邮编列表
  • 用print(df['zipcode'].unique())查看DataFrame中的邮编值,再用print(zip_to_state.keys())查看映射字典的键,确认两者是否有重叠的有效值
  • 如果部分邮编在映射字典中不存在,对应行的states列仍会返回NaN,这属于正常情况,需要补充对应的州-邮编映射

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:19:00