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

Pandas中切片后结果变量y出现NaN值问题求助

解决切片后赋值出现NaN的问题

看起来你遇到的问题核心是pandas的索引对齐机制在搞鬼,我来给你拆解一下:

当你从previous_games_stats取出Unnamed:7列时,y保留了原DataFrame的索引(比如原索引是0、1、2...一直到末尾)。执行y = y[9:]后,y的索引变成了9、10、11...,而你的final_df索引应该是从0开始的连续整数对吧?

这时候你把y赋值给final_df['outcome'],pandas会严格按照索引去匹配值:final_df里索引0-8的位置,在y里根本找不到对应的索引项,所以自动填充成NaN;而y里索引9及以后的内容,只有当final_df也有相同索引时才会被赋值,要是final_df的索引没到那么大,这部分值也会被忽略。最终就出现了你看到的整列都是NaN的情况。

给你几个可行的解决办法:

方法1:重置y的索引(推荐)

用reset_index(drop=True)把切片后的y的索引改成从0开始的连续整数,这样就能和final_df的索引完美对齐:

y = previous_games_stats['Unnamed: 7'] #outcome variable (win/loss)
y = y[9:].reset_index(drop=True) # 重置索引,丢弃原索引
final_df['outcome'] = y

方法2:直接取数值数组忽略索引

如果你能确保final_df的行数和切片后的y的行数完全一致,可以直接提取y的数值部分,跳过索引对齐:

y = previous_games_stats['Unnamed: 7']
y = y[9:].values # 或者用.to_numpy()
final_df['outcome'] = y

额外排查步骤

要是上面的方法还没解决,你可以先验证两个点:

  • 打印y[9:]看看它本身是不是真的有NaN(虽然你说原y正常,但说不定原数据第9行及以后确实是空的)
  • 用len(y[9:])和len(final_df)对比,确认两者行数是否一致,行数不匹配也会导致部分位置出现NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:34:25