You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向空DataFrame追加数据返回NaN值的问题排查求助

问题排查与解决方案

嘿,我一眼就发现问题所在啦!你的核心bug出在对Pandas append() 方法的理解上——它不会直接修改原DataFrame,而是返回一个包含追加后数据的全新DataFrame对象。你现在只是调用了data.append(...),却没有把返回的新对象重新赋值给data,所以最初创建的空DataFrame根本没被更新,最后打印出来自然全是NaN。

修复后的代码

只需要把循环里的追加操作改成赋值形式就行:

cg = vn[vn['name'] == n]
data = pd.DataFrame(data=None, columns=cg.columns,index=cg.index)
for date in cg['date'].unique():
    sd = cg[(cg['date'] == date)]
    # 关键:把append的结果重新赋值给data
    data = data.append(sd, ignore_index=True)
print(data)

更高效的优化建议

其实你完全不用写循环逐个追加,从代码逻辑来看,你要的就是cg中按唯一日期筛选后的所有数据(本质上就是cg本身?如果是想对日期去重或聚合),可以用更简洁高效的Pandas内置方法替代循环:

比如如果是要每个日期只保留一行数据:

cg = vn[vn['name'] == n]
# 直接按date分组取第一条,避免循环
data = cg.groupby('date').first().reset_index()
print(data)

或者如果只是要去重后的日期数据:

data = cg.drop_duplicates(subset='date').reset_index(drop=True)

这种方式不仅代码更简洁,数据量大的时候性能也会比循环好很多。

内容的提问来源于stack exchange,提问作者Jedi Schmedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:51:59