如何合并两个不同大小的Pandas DataFrame且不丢失条目?
解决Pandas合并DataFrame时保留所有行并替换NaN的问题
你使用的pd.merge()默认是内连接(inner join),只会保留两个DataFrame中Name列匹配的行,因此丢失了不匹配的条目。要实现需求,需要用**左连接(left join)**保留左表(alevel_count)的所有行,再将缺失值替换为0。
步骤1:左连接合并DataFrame
指定how='left',以alevel_count为基准保留所有行,右表中匹配不上的列会填充NaN:
merged_df = pd.merge(alevel_count, gcse_count, on='Name', how='left')
步骤2:将NaN替换为0
针对GCSEs列替换缺失值,或者全局替换所有列的缺失值:
# 仅替换GCSEs列的NaN merged_df['GCSEs'] = merged_df['GCSEs'].fillna(0) # 或者全局替换所有列的NaN merged_df = merged_df.fillna(0)
完整示例代码
import pandas as pd # 构造示例数据 alevel_count = pd.DataFrame({ 'Name': ['Joe Bloggs', 'Zane Valdez', 'Sherlock Holmes', 'Joseph Ryan', 'Christian Willis'], 'ALevels': [3, 1, 4, 2, 1] }) gcse_count = pd.DataFrame({ 'Name': ['Joe Bloggs', 'Zane Valdez', 'Sherlock Holmes'], 'GCSEs': [5, 4, 2] }) # 左连接合并 merged_df = pd.merge(alevel_count, gcse_count, on='Name', how='left') # 替换NaN为0 merged_df['GCSEs'] = merged_df['GCSEs'].fillna(0) print(merged_df)
输出结果
Name ALevels GCSEs 0 Joe Bloggs 3 5.0 1 Zane Valdez 1 4.0 2 Sherlock Holmes 4 2.0 3 Joseph Ryan 2 0.0 4 Christian Willis 1 0.0
内容的提问来源于stack exchange,提问作者knight
相关产品推荐
相关产品推荐

