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

Python合并DataFrame后价格列全为NaN的问题排查与解决

解决合并DataFrame后价格列全为NaN的问题

嘿,这种合并后整列NaN的情况我之前也踩过坑,大概率是合并键的匹配环节出了问题,咱们一步步排查解决:

1. 先查合并键的数据类型是否一致

这是最常见的诱因!比如map_df里的邮编是字符串类型(比如"90210"),而价格数据集里的邮编是整数类型(比如90210),两者本质不是同一类数据,自然没法匹配成功。

用这两行代码快速查看类型:

print(map_df['你的邮编列名'].dtype)
print(价格数据集['你的邮编列名'].dtype)

如果类型不一致,统一转成字符串(强烈推荐,因为邮编可能带前导零,转整数会丢失关键信息):

map_df['你的邮编列名'] = map_df['你的邮编列名'].astype(str)
价格数据集['你的邮编列名'] = 价格数据集['你的邮编列名'].astype(str)

2. 检查邮编格式是否完全统一

就算类型一样,格式细节差异也会导致匹配失败:

  • 有没有前导零差异:"01001" vs "1001"
  • 有没有多余空格:" 90210 " vs "90210"
  • 有没有后缀差异:比如美国邮编的"90210-1234" vs "90210"

用这些代码统一格式:

# 去除前后空格
map_df['你的邮编列名'] = map_df['你的邮编列名'].str.strip()
价格数据集['你的邮编列名'] = 价格数据集['你的邮编列名'].str.strip()

# 统一保留5位核心邮编(针对带后缀的情况)
map_df['你的邮编列名'] = map_df['你的邮编列名'].str[:5]
价格数据集['你的邮编列名'] = 价格数据集['你的邮编列名'].str[:5]

# 补上前导零到5位(针对短邮编)
map_df['你的邮编列名'] = map_df['你的邮编列名'].str.zfill(5)
价格数据集['你的邮编列名'] = 价格数据集['你的邮编列名'].str.zfill(5)

3. 确认合并时的键名是否对应正确

如果map_df里的邮编列叫zipcode,价格数据集里叫postal_code,合并时没明确指定左右键,也会导致匹配失败。

合并时一定要清晰指定对应列:

merged_df = pd.merge(map_df, 价格数据集, left_on='map_df的邮编列名', right_on='价格数据集的邮编列名', how='left')

这里how='left'是保留map_df的所有行,刚好符合你做分级统计图的需求。

4. 验证两个数据集是否有重叠的邮编

极端情况是两个数据集的邮编完全没有交集,那合并后自然全是NaN。用这个方法快速验证:

common_zips = set(map_df['你的邮编列名']).intersection(set(价格数据集['你的邮编列名']))
print(f"两个数据集共有的邮编数量:{len(common_zips)}")
print("示例共有邮编:", list(common_zips)[:5])

如果数量为0,那得检查两个数据源是不是对应同一个区域的邮编了。

把上面的问题排查修复后,再重新执行合并操作,应该就能得到正常的价格列啦!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:38:12