polars中LazyFrame常用操作
qingheluo2024-10-25清河洛310
LazyFrame的属性columns list,获取或设置列名
dtypes list,获取列数据类型
schema dict,获取列数据类型
width int,获取列数LazyFrame的方法下面的方法中,参数cols均可以接收为一个str或Selector,也可以是他们组成的listcollect() 执行所有执行计划并返回执行所有任务后的DataFrame
数据类型
cast(dtypes,strict=True) 将指定列转换为指定的数据类型
dict{colname|selector:dtype}
...
LazyFrame的属性
columns list,获取或设置列名
dtypes list,获取列数据类型
schema dict,获取列数据类型
width int,获取列数
LazyFrame的方法
下面的方法中,参数cols均可以接收为一个str或Selector,也可以是他们组成的list
collect() 执行所有执行计划并返回执行所有任务后的DataFrame
数据类型
cast(dtypes,strict=True) 将指定列转换为指定的数据类型
dict{colname|selector:dtype}
strict表示启用严格模式,如果数据不能被转换会抛出错误
collect_schema() 解析数据的数据类型,返回类似于dict{colname:dtype}
排序
reverse() :将所有的列反转
sort(cols,*descending=False,nulls_last=False,multithreaded=True,maintain_order=False)
以指定列为基准进行排序
descending 是否降序,当cols为多列时指定一个list以单独设置每列
nulls_last 是否将空值放在最后,当cols为多列时指定一个list以单独设置每列
maintain_order 如果元素相等,是否保持原顺序
multithreaded 是否使用多线程进行排序操作
增
merge_sorted(other:LazyFrame,key:str) 将一个已经排序的other附加到源数据中
源数据必须也已经经过排序且两个数据的字段必须完全相同
key指定参与排序的字段名
with_columns(*exprs,**named_exprs) 基于现有列进行运算后添加新列
当使用位置参数时
(pl.col("a") ** 2).alias("2a") :表示将a列的值乘以2添加到名称为"2a"的列
使用关键字参数时,key为新列的名称
2a = pl.col("a") ** 2
当指定的列名已存在时会覆盖原列中的数据
with_columns_seq(*exprs,**named_exprs) with_columns的别名函数
删
drop(cols,*,strict=True) 删除指定列,strict表示列不存在时是否抛出错误
drop_nulls(cols=None) 删除指定列中存在空值的行,cols为None表示检查所有列
unique(cols=None,*,keep='any',maintain_order=False) 对数据基于指定列的值行去重
cols为None表示使用所有列
keep为重复行中保留哪一行数据,可选值'first','last','any','none'
maintain_order表示是否保持与原始数据相同的顺序,会降低效率
如果存在类型为List的列,则此方法将失败
改
rename(arg) 列重命名,arg为dict或func,func接受一个列名并返回新的列名
fill_nan(value) 使用value替换数据中的浮点NaN值(并非空值)
fill_null(value=None,strategy=None,limit=None)
使用指定的值value填充空值
strategy表示一种填充策略,可选值
forward, backward, min, max, mean, zero, one
当设定了该值那么value应该设置为None
limit:使用forward或backward策略时要填充的连续空值的数量
查
filter(predicates) :数据筛选
predicates表示若干删选条件,多个条件使用逗号隔开
默认多个条件之间使用逻辑与
data.filter(pl.col("销量") > 100,pl.col("年份") == 2024)
也可以使用key=val的格式传入,解析为pl.col(key) == val
data.filter(销量=100,年份=2024)
select(exprs,*,named_exprs) :选择特定的列
exprs表示要选择的列,可以为列名str或selector,或者他们组成的list
named_exprs:要返回的其他列,使用关键字参数传入,返回的列将进行重命名
select_seq() select()的别名函数
sql(sql,*,table_name='self') :以数据库的sql语句来进行数据筛选
table_name指定sql语句中的表名称
数据截取
bottom_k(k: int,*,by: col | list[col],reverse=False) 取出数据中最小值的k行数据
top_k(k: int,*,by: col | list[col],reverse=False) 取出数据中最大值的k行数据
by指定排序的列名
reverse指定排序方式,如果by为多列可以为list
first() / last() 获取第/最后一行数据,返回只有一行的LazyFrame
head/limit(n=5) :获取从索引0开始至指定索引之间所有行,n为负数表示从从尾部开始的索引
tail(n=5) :获取最后n行,为负数表示从索引n开始至末尾的所有行
gather_every(n: int, offset: int = 0) 每隔n行取出一行
slice(offset: int, length = None) :截取数据的一部分
offset表示开始的行索引,负数表示从后向前的索引
length表示截取的总行数,为None则截取至数据末尾
统计聚合
count() 获取每列中的非空元素数量,{col:num,...}
max()/min() 返回每列中的最大/小值,只有一行数据的LazyFrame
mean() 返回每列平均值,只有一行数据的LazyFrame,bool值中True视为1,False视为0,并忽略空值
std() 返回每列标准差,只有一行数据的LazyFrame
var() 返回每列方差,只有一行数据的LazyFrame
sum() 返回每列的数值总和,只有一行数据的LazyFrame
null_count() 返回每列中空值的数量,只有一行数据的LazyFrame
索引相关
with_row_index(name='index',offset=0) :添加一个名为name的用于索引的列,索引值从offset开始每行自增1
数据分组
group_by(by,*,maintain_order=False) :数据分组
返回一个LazyGroupBy,可以通过不同方法进行分组相关操作
by指定要分组的列,一个str或Selector,也可以是他们组成的list
maintain_order表示是否要求组的顺序与输入数据一致,这会降低性能
序列化
serialize(file,*,format='binary') 将数据序列化并写入文件
file指定序列化结果写入的文件名,为None则返回序列化结果
format指定格式,目前仅支持binary,json格式已被弃用
deserialize(file,*,format='binary') 从序列化文件中读取数据
序列化在版本之间不稳定,一个版本中序列化的文件可能无法在另一个版本中反序列化
其他
clear(n=0) :返回一个清空数据并返回n行使用null填充的副本
clone() :创建一个数据的副本
rechunk() :将数据进行重新分块或组织,以便它们在一个连续的内存区域中分配,确保所有后续操作具有最佳和可预测的性能
shift(n = 1, *, fill_value = None) :将所有行向上或向下移动
n为整数表示向上移动,为负表示向下移动
fill_value表示移动后行的空值的填充值
unnest(cols) 将组合列组合列分解为单个列,通过pl.struct()来实现列的组合
pl.struct(*exprs,**named_exprs)
exprs为位置参数
named_exprs为关键字参数
LazyGroupBy的分组操作方法
agg(*aggs, **named_aggs) 按分组的每个组进行聚合操作
exprs为位置参数
named_exprs为关键字参数
all() 将分组以外的列中的数据聚合为list
len(name='len') 将分组以外的列中的数据聚合为数据的数量,name指定聚合后的列名
first()/last() 将分组以外的列中的数据聚合为第/最后一个值
head(n=5) 选取每个分组最多前n行数据(不进行聚合)
tail(n=5) 选取每个分组最多后n行数据(不进行聚合)
max()/min() 将分组以外的列中的数据聚合为最大/小值
mean() 将分组以外的列中的数据聚合为平均值
sum() 将分组以外的列中的数据聚合为累计求和
median() 将分组以外的列中的数据聚合为每组的中位数
n_unique() 将分组以外的列中的数据聚合为每组的唯一值数量