注册 登录

清河洛

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()        将分组以外的列中的数据聚合为每组的唯一值数量


网址导航