假设,我正在阅读一个有数百列的CSV.
现在,我知道在一个特定的专栏之后,说'XYZ'
个专栏所有的专栏都是垃圾.
我想保留从开始到第'XYZ'
列的所有列,并删除第'XYZ'
列之后的所有列.
在Pandas 身上,我可能会做一些类似的事情:
df.iloc[:, :df.columns.get_loc('XYZ') + 1]
在极地有什么有效的方法?
假设,我正在阅读一个有数百列的CSV.
现在,我知道在一个特定的专栏之后,说'XYZ'
个专栏所有的专栏都是垃圾.
我想保留从开始到第'XYZ'
列的所有列,并删除第'XYZ'
列之后的所有列.
在Pandas 身上,我可能会做一些类似的事情:
df.iloc[:, :df.columns.get_loc('XYZ') + 1]
在极地有什么有效的方法?
使用[:]
的切片解决方案适用于渴望判断(DataFrame
),但据我所知,它不适用于LazyFrame
.
如果你想使用lazy evaluation,你可以使用DataFrame.select()
:
# prepare the data
df = pl.LazyFrame({
'ABC': [1,2,3],
'DEF': [4,5,6],
'XYZ': [7,8,9],
'garbage1': [10,11,12],
'garbage2': list('abc')
})
df.sink_csv('test.csv')
现在我们可以扫描它了:
df = pl.scan_csv('test.csv')
df.select(df.columns[:df.columns.index('XYZ')+1]).collect()
┌─────┬─────┬─────┐
│ ABC ┆ DEF ┆ XYZ │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 1 ┆ 4 ┆ 7 │
│ 2 ┆ 5 ┆ 8 │
│ 3 ┆ 6 ┆ 9 │
└─────┴─────┴─────┘
然而,我不确定Polar过滤掉不需要返回的列的效率如何,因为它们仍然需要从文件中读取.