将Pandas两列DataFrame转为Series时结果全为NaN,求解决方案
问题分析与解决方法
错误原因
过滤行逻辑错误
你试图移除值为0的行,但代码里写的是df[df["Runner"] > 0]——Runner列是字符串类型,和数字0比较完全不符合需求,正确的过滤对象应该是distance列(你要移除的是distance为0的行)。创建Series的索引参数错误
创建ser1时,index=df[df["Runner"]]是错误写法:df[df["Runner"]]本质是用布尔索引(但字符串列无法生成有效布尔值,实际会返回原DataFrame的子集),并非你需要的索引数组。这导致新Series的索引与data的索引不匹配,最终全为NaN。
解决步骤
1. 正确过滤目标行
针对distance列过滤掉值为0的行:
df = df[df["distance"] != 0] # 等价写法:df = df[df["distance"] > 0]
2. 正确生成目标Series
直接传入正确的索引列即可:
ser1 = pd.Series(data=df["distance"], index=df["Runner"])
更简洁的写法可以用set_index一步完成:
ser1 = df.set_index("Runner")["distance"]
最终结果
执行上述代码后,得到的ser1与你的预期完全一致:
Runner Runner1 2 Runner2 1 Runner4 1 Name: distance, dtype: int64
内容的提问来源于stack exchange,提问作者SSC
相关产品推荐
相关产品推荐

