Pandas中添加全球数据至DataFrame时出现NaN值问题求助
问题诊断与修复
你的代码出现NaN的原因很明确,同时还有索引对齐的潜在问题,以下是具体分析和修复方案:
核心错误
- 赋值对象错误:你试图添加全球用户数据,但代码里给
total_users_ww列赋值的是美国数据的total_users(fb_us_data['total_users']),完全没用到提取好的fb_ww_data。 - 索引不匹配风险:即使修正赋值对象,如果
fb_ww_data和fb_intl_data的索引(或日期)不完全对应,Pandas的自动索引对齐会导致不匹配的行出现NaN。
修复代码
推荐方案:按app_id和date合并数据
这种方式能确保数据严格按日期和应用ID匹配,避免索引问题:
fb_us_data = us_data[us_data.app_id == fb_key] fb_ww_data = ww_data[ww_data.app_id == fb_key] # 合并美国与全球数据,自动对齐日期和应用ID fb_intl_data = fb_us_data[["app_id", "date", "total_users"]].merge( fb_ww_data[["app_id", "date", "total_users"]], on=["app_id", "date"], suffixes=("_us", "_ww") # 给重复列名加后缀区分 ) print(fb_intl_data)
备选方案:重置索引后直接赋值
如果能确认fb_us_data和fb_ww_data的日期顺序、行数完全一致,可以重置索引消除对齐问题:
fb_us_data = us_data[us_data.app_id == fb_key].reset_index(drop=True) fb_ww_data = ww_data[ww_data.app_id == fb_key].reset_index(drop=True) fb_intl_data = fb_us_data[["app_id", "date"]] fb_intl_data["total_users_us"] = fb_us_data["total_users"] # 修正为使用全球数据列 fb_intl_data["total_users_ww"] = fb_ww_data["total_users"] print(fb_intl_data)
额外排查
如果修复后仍有NaN,检查以下几点:
- 确认
fb_ww_data不为空:执行print(fb_ww_data)看是否有对应fb_key的数据 - 检查日期格式:两个数据集的
date列是否为相同格式(如是否都是datetime类型,无时区差异) - 检查数据完整性:是否存在部分日期在全球数据集中缺失,可通过
fb_ww_data.date.isin(fb_us_data.date).value_counts()查看匹配情况
内容的提问来源于stack exchange,提问作者mvc
相关产品推荐
相关产品推荐

