DataFrame合并空值问题求助:分类列与缩放列拼接异常
问题根源与排查解决思路
核心问题
你遇到的空值问题是**pd.concat默认按行拼接(axis=0)**导致的:
- 未指定
axis=1时,pandas会把categorical_columns_df和scaled_df按行堆叠,而非按列合并。前半部分行只保留分类列的值,缩放列自然为空;后半部分行只保留缩放列的值,分类列为空。 - 另外你写的
dfs_to_concat[categorical_columns_df]是错误的列表构造方式,正确操作是将两个DataFrame放入同一个列表中。
修正代码
直接指定axis=1按列合并,同时修正列表构造:
# 正确构造待合并的DataFrame列表 dfs_to_concat = [categorical_columns_df, scaled_df] # 按列合并(axis=1是关键) new_df = pd.concat(dfs_to_concat, axis=1)
如果存在索引不匹配的情况(即使行数一致,索引值可能不同),可先重置索引确保对齐:
# 重置索引,丢弃原索引避免干扰 categorical_columns_df = categorical_columns_df.reset_index(drop=True) scaled_df = scaled_df.reset_index(drop=True) # 再按列合并 new_df = pd.concat([categorical_columns_df, scaled_df], axis=1)
排查思路
- 检查
pd.concat的axis参数:默认axis=0是行拼接,按列合并必须显式指定axis=1。 - 验证列表构造是否正确:确保
dfs_to_concat是包含两个DataFrame的列表,而非错误的索引操作。 - 确认索引对齐情况:用
categorical_columns_df.index和scaled_df.index查看索引是否一致,不一致时重置索引即可。 - 核对行数一致性:执行
len(categorical_columns_df)和len(scaled_df),确认两者行数完全相同。 - 检查
join参数:默认join='outer'会保留所有列,若只需要重叠列可设为join='inner',但此问题核心不在此。
内容的提问来源于stack exchange,提问作者Wildo_Baggins311
相关产品推荐
相关产品推荐

