本章旨在帮助您通过 Polars 完成常用功能。
DataFrame.unique( subset: ColumnNameOrSelector | Collection[ColumnNameOrSelector] | None = None, *, keep: UniqueKeepStrategy = 'any', maintain_order: bool = False, ) → DataFrame
- subset:参与判断的列。默认所有列。
- keep:保留策略。当有重复数据时,如何处理重复数据。
any:保留任意一个,默认值;first:保留第一个;last:保留最后一个;none:不保留;- maintain_order:数据顺序是否按照原数据顺序,默认
False。如果该值为False时,并且keep值为first,每一次执行保留的值会不一样;设置为True时,keep参数保留的结果才会符合预期。但该参数在一定程度上影响性能。
DataFrame.is_unique() → Series
统计的是所有列作为唯一值判断条件。
DataFrame.n_unique(subset: str | Expr | Sequence[str | Expr] | None = None) → int
统计去重后的个数。
使用指定的值或策略填充空值,选择其一即可。
DataFrame.fill_null( value: Any | Expr | None = None, strategy: FillNullStrategy | None = None, limit: int | None = None, *, matches_supertype: bool = True, ) → DataFrame
- value:指定值进行填充替换null值。
- strategy:替换策略。forward:使用前一个非空值进行填充;backward:使用后一个非空值进行填充;min:使用最小值进行填充;max:使用最大值进行填充;mean:使用平均值进行填充;zero:使用0填充;one:使用1填充;
- limit:使用
forward或backward策略时要填充的连续空值数,即不是所有null值都进行填充,只填充前n个或者后n个。
通过上面的示例中也可以看出,这种指定值的方式,只能填充给定的值的数据类型的null值,其他类型的null值并没有进行填充。
使用limit限制
Series.null_count() → int
DataFrame.drop_nulls( subset: ColumnNameOrSelector | Collection[ColumnNameOrSelector] | None = None, ) → DataFrame
- subset:参与判断的列,默认所有列。
与处理null值的方法类似。
DataFrame.fill_nan(value: Expr | int | float | None) → DataFrame
DataFrame.drop_nans( subset: ColumnNameOrSelector | Collection[ColumnNameOrSelector] | None = None, ) → DataFrame
处理nan值的方法相比于处理null值的方法要少,所以在处理nan时,可以先将其处理成null值,再按照null值的处理方式进行处理,如下所示:
这样,原本value列中为nan值的数据就被处理成了null值,接下来就可以按照处理null值的方式进行处理。
concat
polars.concat( items: Iterable[PolarsType], *, how: ConcatMethod = 'vertical', rechunk: bool = False, parallel: bool = True, ) → PolarsType
主要的是以下两个参数:
- items:参与拼接的多个对象。请注意,Series仅支持垂直策略(vertical)。所以,一般都是DataFrame对象。
- how:拼接方式,默认垂直拼接(vertical)。这里只介绍几种常用的,其他参考官方接口。vertical:垂直合并;horizontal:水平合并;diagonal:对角线合并。
使用concat函数和how="vertical"参数即可, 但是要注意, 如果没有相同的列名, 则会报错(比如一个3列一个2列, 或者都是2列但是列名不完全相同)。
水平拼接时,如果包含相同的列名则会报错。多个对象的行数可以不一致,默认会使用null来填充。
新生成的DataFrame会更长或更宽。如果存在相同列,则该列会增加行。
join
DataFrame.join( other: DataFrame, on: str | Expr | Sequence[str | Expr] | None = None, how: JoinStrategy = 'inner', *, left_on: str | Expr | Sequence[str | Expr] | None = None, right_on: str | Expr | Sequence[str | Expr] | None = None, suffix: str = '_right', validate: JoinValidation = 'm:m', nulls_equal: bool = False, coalesce: bool | None = None, maintain_order: MaintainOrderJoin | None = None, ) → DataFrame
- other:待关联对象。
- on:关联列名。当两个关联的对象关联列名相同时可用,如果是多列关联,则["A","B","C",...]。与
left_on和right_on不可同时存在。- how:关联方式,默认内连接(inner)。inner-内连接、left-左连接、right-右连接、full-全连接、semi-半连接、anti-反连接、cross-笛卡尔积。
- left_on:左侧DataFrame中进行关联的列名称,可多列。与
on不可同时存在。- right_on:右侧DataFrame中进行关联的列名称,可多列。与
on不可同时存在。- suffix:当存在重复列时,右侧列中重复的列名将会添加该参数值作为后缀。默认:
_right。- coalesce:当存在重复列时,是否合并重复列。
- maintain_order:合并后的数据的排序方式。
left:按照左侧DataFrame顺序;right:按照右侧DataFrame顺序;left_right:先按照左侧再按照右侧,right_left:先按照右侧再按照左侧。
和内连接有点类似,但是结果只返回了左侧DataFrame中的数据。可以将结果与内连接的结果进行对比。
和半连接类似,半连接返回的是匹配的左侧DataFrame中的数据;而反连接返回的是不匹配的左侧DataFrame中的数据。
读取文件和写入文件是两个相对通用的方法,也很简单,这里列一些常用的文件:
pl.read_csv("data.csv")df.write_csv("data.csv")pl.read_excel("data.xlsx")df.write_excel("data.xlsx")pl.read_json("data.json")df.write_json("data.json")pl.read_parquet("data.parquet")df.write_parquet("data.parquet")需要注意的是,在写入或者读取文件时,对于部分文件还需要安装对应的依赖包,比如Excel需要额外安装fastexcel xlsx2csv openpyxl xlsxwriter等依赖。