如何用整数列表选取非整数索引的pd.DataFrame行?代码求助
解决方法
要实现用整数列表选取非整数索引DataFrame的对应行,你需要用基于位置的索引方法iloc,而不是loc(loc是基于标签的索引,会匹配你的非整数索引值,不是位置)。另外注意,你的原始代码里loc(L)的调用方式是错误的,应该用方括号[]。
正确代码示例
import pandas as pd L = [1, 3, 5] df = pd.DataFrame([1,2,3,4,5,6,7], index=[0.1,0.2,0.3,0.4,0.5,0.6,0.7]) # 用iloc按位置选取行,再提取列0的数据 selected = df.iloc[L][0] # 把索引和值按期望格式拼接输出 output = ' '.join(f"{idx} {val}" for idx, val in selected.items()) print(output)
输出结果
0.2 2 0.4 4 0.6 6
为什么你的原始代码不行?
df[0]是正确的,它选取了DataFrame中列名为0的列(因为你的DataFrame是单列,列名默认是0)。df[0].loc(L)有两个问题:loc的调用应该用方括号[],不是圆括号();loc是按索引标签匹配的,你的L里的1,3,5不是df的索引值(df的索引是0.1、0.2这类小数),所以会报错找不到对应标签。
另一种更简洁的写法
如果你只需要提取列0的对应值和索引,也可以直接对列用iloc:
selected = df[0].iloc[L] output = ' '.join(f"{idx} {val}" for idx, val in selected.items()) print(output)
这样和上面的效果完全一样,只是直接对列Series使用iloc来选取位置。
内容的提问来源于stack exchange,提问作者Artur Müller Romanov
相关产品推荐
相关产品推荐

