如何用另一DataFrame填充pandas电影DataFrame中的NaN值?
用另一个DataFrame填充pandas电影DataFrame的NaN值
核心思路
以tittle作为匹配标识,定位df_amazon中存在空值的电影记录,用df_disney中对应电影的有效值替换空值,同时保留df_amazon原有的非空数据,忽略df_disney中独有的记录。
步骤1:构建示例数据
先还原你提供的两个数据集:
import pandas as pd import numpy as np df_amazon = pd.DataFrame({ 'tittle': ['a'], 'genre': ['b'], 'director': [np.nan] }) df_disney = pd.DataFrame({ 'tittle': ['a'], 'genre': ['b'], 'director': ['c'] })
方法1:使用combine_first(简洁推荐)
这个方法会自动用df_disney的值填充df_amazon的NaN,且不会覆盖原有的非空数据。只需先将两个DataFrame的索引设为tittle确保匹配对齐:
# 设置tittle为索引,保证匹配精度 df_amazon_idx = df_amazon.set_index('tittle') df_disney_idx = df_disney.set_index('tittle') # 填充NaN并重置索引 df_amazon_filled = df_amazon_idx.combine_first(df_disney_idx).reset_index()
执行后df_amazon_filled的director列空值会被替换为'c',其他列保留原数据。
方法2:合并后精准填充(适合自定义控制)
如果需要只填充特定列的空值,可通过合并后手动处理:
# 按tittle左合并,保留df_amazon所有记录 merged = df_amazon.merge(df_disney, on='tittle', suffixes=('_amz', '_dis'), how='left') # 用disney的director填充amazon的空值 merged['director'] = merged['director_amz'].fillna(merged['director_dis']) # 还原原列结构 df_amazon_filled = merged[['tittle', 'genre_amz', 'director']].rename(columns={'genre_amz': 'genre'})
处理重复记录
如果df_disney中存在同一电影(相同tittle)的多条记录,先去重确保每个电影只保留一条有效数据:
# 去重:保留每个tittle的第一条记录 df_disney_clean = df_disney.drop_duplicates(subset='tittle', keep='first') # 再用上述任一方法完成填充
内容的提问来源于stack exchange,提问作者Juan Alberto Esequiel Jara
相关产品推荐
相关产品推荐

