Pandas合并DataFrame时仅返回5行而非预期7行的问题咨询
问题原因
- 生成独热编码矩阵
df_neighbourhood_one时调用了.head()方法,该方法默认仅返回数据前5行,导致df_neighbourhood_one缺少host_id=5、host_id=6对应的两行索引数据 - pandas
merge方法默认使用内连接(inner join),仅保留两个表匹配键同时存在的行,因此最终合并结果只有匹配成功的5行,缺失后两行数据
解决方法
你当前场景只需删除独热编码生成步骤中多余的.head()调用,保证df_neighbourhood_one包含所有7行的索引和独热编码值即可,修改对应代码为:
df_neighbourhood_one = pd.get_dummies(df_neighbourhood['neighbourhood'])
如果实际业务中存在独热编码表缺少部分索引的场景,又需要保留原业务表的所有行,可以将合并逻辑改为左连接,手动填充缺失的独热值为0:
# 改为左连接保留左表所有行 df = pd.merge(df, df_neighbourhood_one, right_index=True, left_on=['host_id', 'id'], how='left') # 填充缺失的独热编码值为0,转为整型 df[['Centrum', 'North', 'West']] = df[['Centrum', 'North', 'West']].fillna(0).astype(int)
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

