如何从DataFrame A中提取指定行索引数据生成新DataFrame?
解决方法
先纠正你之前的错误操作:
pop()是用于删除并返回DataFrame的列,参数是列名,完全不适合提取行的场景。drop()是删除指定行/列后返回剩余的DataFrame,不是直接提取你需要的目标行。loc的调用方式错误:loc是属性访问器,需用方括号[]而非圆括号(),用圆括号会被当成函数调用,传入列表自然会触发unhashable type: 'list'错误。
正确的无循环提取方式:
首先注意:你之前定义目标索引列表的写法有误,列表元素间必须用逗号分隔,比如[1, 5, 6, ...],而非[1 5 6 ...]。
方式1:直接用loc(适合确定所有目标索引都存在于dfA行索引的场景)
target_indices = [1, 5, 6, 9, 11, 17, ..., 564, 985, 2545] dfB = dfA.loc[target_indices]
若
target_indices里有dfA行索引不存在的值,会触发KeyError。
方式2:用isin过滤(兼容存在/不存在的索引,仅提取实际存在的行)
如果不确定目标索引是否都在dfA中,用这种方式更安全,不会报错:
target_indices = [1, 5, 6, 9, 11, 17, ..., 564, 985, 2545] dfB = dfA[dfA.index.isin(target_indices)]
或者结合loc写法:
dfB = dfA.loc[dfA.index.isin(target_indices)]
内容的提问来源于stack exchange,提问作者Tony Sirico
相关产品推荐
相关产品推荐

