Pandas提取列值追加到列表如何避免携带索引等Series信息
问题解答
问题原因
你当前代码中d1["Class"].loc[Emp["Name"]=="Roy"]返回的是Series类型对象,而非单独的Class字段标量值,因此追加到列表时会携带索引、所属列名、数据类型等附属属性,后续转DataFrame就会出现带索引的异常展示。
你确实需要将筛选得到的Series转为标量或普通列表类型,只保留字段值本身,即可解决该问题。
无索引追加值的实现方法
- 方法1:单命中场景提取Series标量值
如果确定筛选条件只会命中唯一1条记录,可以直接用.item()方法提取纯值:EmpList = [] c1 = d1["Class"].loc[Emp["Name"]=="Roy"].item() EmpList.append(c1) - 方法2:兼容多命中场景的列表转换
如果筛选条件可能命中多条记录,可以先把Series转成普通列表,再展开追加到目标列表:EmpList = [] c1 = d1["Class"].loc[Emp["Name"]=="Roy"].tolist() EmpList.extend(c1) # 用extend展开值,避免生成嵌套列表 - 方法3:通过numpy数组属性取值
也可以通过.values属性拿到Series底层存储的numpy数组,再提取对应值:EmpList = [] # 单命中场景取数组第一个元素 c1 = d1["Class"].loc[Emp["Name"]=="Roy"].values[0] EmpList.append(c1)
内容的提问来源于stack exchange,提问作者Snoke
相关产品推荐
相关产品推荐

