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

如何确保Pandas DataFrame包含全部美国州数据?

解决Pandas合并州数据缺失的问题

你的问题出在默认的merge是内连接,只会保留两个DataFrame共有的STATE行,所以最终只有43个州;同时因为两个表都有Count列,合并后自动生成后缀区分的列。下面是两种可行的解决方案:

方法一:左连接+填充缺失值

以全量州的DataFrame为基准,用左连接保留所有50个州,再将原始数据的Count值填充进去,缺失的用0代替:

import pandas as pd

# 读取原始CSV数据
states = pd.read_csv("states.csv")

# 创建包含全部50个州的DataFrame,Count默认设为0
all_states = pd.DataFrame([
    ["AL", 0], ["AK", 0], ["AZ", 0], ["AR", 0], ["CA", 0], ["CO", 0], ["CT", 0], ["DE", 0], ["FL", 0], ["GA", 0],
    ["HI", 0], ["ID", 0], ["IL", 0], ["IN", 0], ["IA", 0], ["KS", 0], ["KY", 0], ["LA", 0], ["ME", 0], ["MD", 0],
    ["MA", 0], ["MI", 0], ["MN", 0], ["MS", 0], ["MO", 0], ["MT", 0], ["NE", 0], ["NV", 0], ["NH", 0], ["NJ", 0],
    ["NM", 0], ["NY", 0], ["NC", 0], ["ND", 0], ["OH", 0], ["OK", 0], ["OR", 0], ["PA", 0], ["RI", 0], ["SC", 0],
    ["SD", 0], ["TN", 0], ["TX", 0], ["UT", 0], ["VT", 0], ["VA", 0], ["WA", 0], ["WV", 0], ["WI", 0], ["WY", 0]
], columns=["STATE", "Count"])

# 左连接:以all_states为基准,保留所有州
new_df = all_states.merge(states, on="STATE", how="left", suffixes=("_default", "_original"))

# 合并Count列:原始数据有值则用原始值,否则用默认的0
new_df["Count"] = new_df["Count_original"].fillna(new_df["Count_default"])

# 保留需要的列
new_df = new_df[["STATE", "Count"]]

方法二:用combine_first快速合并

通过设置STATE为索引,使用combine_first直接用原始数据的非空值覆盖全量州的默认值,代码更简洁:

import pandas as pd

# 读取原始数据并设置STATE为索引
states = pd.read_csv("states.csv").set_index("STATE")

# 创建全量州DataFrame并设置STATE为索引
all_states = pd.DataFrame([
    ["AL", 0], ["AK", 0], ["AZ", 0], ["AR", 0], ["CA", 0], ["CO", 0], ["CT", 0], ["DE", 0], ["FL", 0], ["GA", 0],
    ["HI", 0], ["ID", 0], ["IL", 0], ["IN", 0], ["IA", 0], ["KS", 0], ["KY", 0], ["LA", 0], ["ME", 0], ["MD", 0],
    ["MA", 0], ["MI", 0], ["MN", 0], ["MS", 0], ["MO", 0], ["MT", 0], ["NE", 0], ["NV", 0], ["NH", 0], ["NJ", 0],
    ["NM", 0], ["NY", 0], ["NC", 0], ["ND", 0], ["OH", 0], ["OK", 0], ["OR", 0], ["PA", 0], ["RI", 0], ["SC", 0],
    ["SD", 0], ["TN", 0], ["TX", 0], ["UT", 0], ["VT", 0], ["VA", 0], ["WA", 0], ["WV", 0], ["WI", 0], ["WY", 0]
], columns=["STATE", "Count"]).set_index("STATE")

# 用原始数据的非空值覆盖全量州的默认值,再重置索引
new_df = all_states.combine_first(states).reset_index()

原代码问题说明

  1. 默认merge(how="inner"):只保留两个表共有的STATE,所以仅43个州
  2. 重复列名处理:两个表都有Count列,Pandas自动添加_x和_y后缀区分,导致列冗余

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:17:26