使用ibis==9.4.0按列索引选列遇AttributeError问题求助
问题:Ibis 9.4.0中如何通过数字索引选择多列?
我参考Ibis官方文档示例尝试通过列索引选择多列,代码如下:
import ibis import ibis.selectors as s spotify = ibis.duckdb.connect() spotify.read_csv("hf://datasets/maharshipandya/spotify-tracks-dataset/dataset.csv", table_name = "tracks") tracks = spotify.table("tracks") tracks.select(s.index[1:4])
运行时出现错误:AttributeError: module 'ibis.selectors' has no attribute 'index',使用的版本为ibis==9.4.0,请问如何正确通过数字索引选择多列?
解决方案
在Ibis 9.4.0版本中,s.index选择器尚未推出,要实现通过数字索引选多列,可采用以下两种兼容方法:
方法一:列名列表切片
先获取表的完整列名列表,再通过Python切片语法选取目标列:
import ibis spotify = ibis.duckdb.connect() spotify.read_csv("hf://datasets/maharshipandya/spotify-tracks-dataset/dataset.csv", table_name = "tracks") tracks = spotify.table("tracks") # 选取索引1到4的列(左闭右开,对应第2至第4列) selected_cols = tracks.columns[1:4] result = tracks.select(selected_cols)
方法二:利用s.c选择器结合位置判断
通过ibis.selectors.c配合列的position()属性筛选指定位置的列:
import ibis import ibis.selectors as s spotify = ibis.duckdb.connect() spotify.read_csv("hf://datasets/maharshipandya/spotify-tracks-dataset/dataset.csv", table_name = "tracks") tracks = spotify.table("tracks") # 选择位置在1到3之间的列(position从0开始计数) result = tracks.select(s.c[s.c.position().between(1, 3)])
注:
s.index是Ibis 10.x及以上版本新增的选择器,9.4.0版本不支持该语法,因此需要使用上述替代方案。
内容的提问来源于stack exchange,提问作者Mark Druffel
相关产品推荐
相关产品推荐

