如何正确按列拼接两个DataFrame并实现日期对齐的并排显示?
解决DataFrame并排展示时的NaN与索引问题
问题描述
尝试将两个DataFrame内容并排展示,执行以下代码后:
gh = pd.concat([data[0], data[1]], keys=["Berlin", "London"], axis=1)
结果出现双列索引(name和date),对应城市的数值区域存在大量NaN,仅在各自索引行有数据。期望实现:仅保留date作为行索引,同一日期下两个城市的对应数值并排显示,无NaN值。
解决方案
问题核心在于两个DataFrame的行索引未统一为date,且原代码的keys参数导致列多级索引,同时行索引未对齐产生NaN。按以下步骤调整:
预处理单个DataFrame:
分别提取每个城市数据的date和数值列,将数值列重命名为城市名,并设置date为行索引:# 处理Berlin数据(替换value为你的实际数值列名) berlin_df = data[0].set_index('date')[['value']].rename(columns={'value': 'Berlin'}) # 处理London数据 london_df = data[1].set_index('date')[['value']].rename(columns={'value': 'London'})合并DataFrame:
基于统一的date索引,使用pd.concat横向合并:gh = pd.concat([berlin_df, london_df], axis=1)
替代方案(使用merge)
如果需要更严格的索引对齐,也可以用pd.merge:
gh = pd.merge( data[0].set_index('date'), data[1].set_index('date'), left_index=True, right_index=True, suffixes=('_Berlin', '_London') )
说明
- 确保两个DataFrame的
date列完全匹配(无缺失或不重复的日期),否则仍会出现NaN,可根据需求用fillna()填充缺失值。 - 预处理时移除无关列(如
name),避免合并后出现冗余的多级列索引。
内容的提问来源于stack exchange,提问作者rafaelHTML
相关产品推荐
相关产品推荐

