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

