我有一个多列的df,需要从中处理不同范围的列.
在Pandas中,我可以使用如下代码的表达式:df.loc[:,‘first_name’:‘last_name’]来获取两个端点之间所需的列.在POLARS中有没有类似功能,不需要列出每个所需范围内的所有大量列名?
我有一个多列的df,需要从中处理不同范围的列.
在Pandas中,我可以使用如下代码的表达式:df.loc[:,‘first_name’:‘last_name’]来获取两个端点之间所需的列.在POLARS中有没有类似功能,不需要列出每个所需范围内的所有大量列名?
由于df.columns
只是一个列表,您可以使用.index
方法找到它们的位置.通过Eager[]
API或.select
接口可以按如下方式完成此操作:
import polars as pl
def inclusive(target, a, b):
start, stop = target.columns.index(a), target.columns.index(b)
return pl.col(target.columns[start:stop+1])
df = pl.DataFrame({
'date': ['2000-01-01', '2000-01-02'],
'first_name': ['Alice', 'Bob' ],
'middle_name': [None, 'Edward' ],
'last_name': ['Smith', 'Jones' ],
'standing': ['good', 'bad'],
})
print(
df[:, 'first_name':'last_name'], # eager [] selection
# shape: (2, 3)
# ┌────────────┬─────────────┬───────────┐
# │ first_name ┆ middle_name ┆ last_name │
# │ --- ┆ --- ┆ --- │
# │ str ┆ str ┆ str │
# ╞════════════╪═════════════╪═══════════╡
# │ Alice ┆ null ┆ Smith │
# │ Bob ┆ Edward ┆ Jones │
# └────────────┴─────────────┴───────────┘
df.select(inclusive(df, 'first_name', 'last_name')),
# shape: (2, 3)
# ┌────────────┬─────────────┬───────────┐
# │ first_name ┆ middle_name ┆ last_name │
# │ --- ┆ --- ┆ --- │
# │ str ┆ str ┆ str │
# ╞════════════╪═════════════╪═══════════╡
# │ Alice ┆ null ┆ Smith │
# │ Bob ┆ Edward ┆ Jones │
# └────────────┴─────────────┴───────────┘
sep='\n\n',
)