向空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
相关产品推荐
相关产品推荐

