到本讲座结束时,您将能够:
- 配置Polars数据的显示方式
- 保存和加载配置
Polars具有一个pl.Config命名空间,其中包含允许您控制数据如何打印到屏幕上的函数。在本讲座中,我们将探讨这些选项。
import polars as pl
csv_file = "../data/titanic.csv"
df = pl.read_csv(csv_file)
格式化表格
我们可以控制表格如何打印到屏幕上。
例如,我们可以使用set_tbl_rows来设置打印在表格中的行数。
pl.Config.set_tbl_rows(4)
df
shape: (891, 15)
survived pclass sex age sibsp parch fare embarked class who adult_male deck embark_town alive alone
i64 i64 str f64 i64 i64 f64 str str str bool str str str bool
0 3 "male" 22.0 1 0 7.25 "S" "Third" "man" true null "Southampton" "no" false
1 1 "female" 38.0 1 0 71.2833 "C" "First" "woman" false "C" "Cherbourg" "yes" false
… … … … … … … … … … … … … … …
1 1 "male" 26.0 0 0 30.0 "C" "First" "man" true "C" "Cherbourg" "yes" true
0 3 "male" 32.0 0 0 7.75 "Q" "Third" "man" true null "Queenstown" "no" true
当你做出更改时,它会一直生效,直到会话结束。
相反,为了对单个代码块应用配置设置,我们可以使用 with上下文管理器将其包装起来。
请注意,在这种情况下,我们将设置作为pl.Config的参数来应用。
with pl.Config(set_tbl_rows=2):
print(df)
shape: (891, 15)
┌──────────┬────────┬──────┬──────┬───┬──────┬─────────────┬───────┬───────┐
│ survived ┆ pclass ┆ sex ┆ age ┆ … ┆ deck ┆ embark_town ┆ alive ┆ alone │
│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ str ┆ f64 ┆ ┆ str ┆ str ┆ str ┆ bool │
╞══════════╪════════╪══════╪══════╪═══╪══════╪═════════════╪═══════╪═══════╡
│ 0 ┆ 3 ┆ male ┆ 22.0 ┆ … ┆ null ┆ Southampton ┆ no ┆ false │
│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
│ 0 ┆ 3 ┆ male ┆ 32.0 ┆ … ┆ null ┆ Queenstown ┆ no ┆ true │
└──────────┴────────┴──────┴──────┴───┴──────┴─────────────┴───────┴───────┘
为了控制列数,我们使用set_tbl_cols。
pl.Config.set_tbl_cols(4)
df
shape: (891, 15)
survived pclass … alive alone
i64 i64 … str bool
0 3 … "no" false
1 1 … "yes" false
… … … … …
1 1 … "yes" true
0 3 … "no" true
这里有许多其他函数可以控制表格的显示方式,你可以在这里看到它们:https://pola-rs.github.io/polars/py-polars/html/reference/config.html
格式化值
为了控制浮点数的显示,我们可以使用set_fmt_float。默认设置限制了打印出的浮点数的长度。如果我们使用默认的mixed参数,Polars会对大值和小值使用科学记数法。
pl.Config.set_fmt_float()
s = pl.Series([1.2304980958725870923,1e6,1e-8])
print(s)
shape: (3,)
Series: '' [f64]
[
1.230498
1e6
1.0000e-8
]
但是,我们也可以使用full参数来打印完整的浮点数。
pl.Config.set_fmt_float("full")
print(s)
shape: (3,)
Series: '' [f64]
[
1.230498095872587
1000000
0.00000001
]
以类似的方式,我们可以使用set_fmt_str_lengths来设置字符串中打印的字符数。
pl.Config.set_fmt_str_lengths(200)
df.select(pl.col(pl.Utf8)).head(2)
shape: (2, 7)
sex embarked … embark_town alive
str str … str str
"male" "S" … "Southampton" "no"
"female" "C" … "Cherbourg" "yes"
详细模式
Polars默认不会打印其内部工作的任何信息。如果你想要看到更多关于此的信息,可以使用set_verbose函数。这通常是我对正在运行的单个查询想要做的事情,所以我在这里使用了with语句来实现这一点。
with pl.Config(set_verbose=1):
df.sort("PassengerId").group_by("PassengerId").mean()
请注意,详细模式的内容是为了帮助Polars开发者进行调试,因此可能对于新加入该库的人来说不太具有信息性!在这种情况下,我们看到输出“group_by keys are sorted; running sorted key fast path”。正如我们在本课程后面将看到的,这意味着Polars正在使用快速通道算法来对这个已排序的列进行分组。
保存和加载配置
如果我们想要保存一组配置选项,我们可以使用pl.Config.save_to_file将这些选项写入一个JSON文件。
pl.Config.save_to_file("config.json")
并且,我们可以在未来的会话中使用pl.Config.load_to_file来重新加载这些配置。
pl.Config.load_from_file("config.json")
如果我们想要查看当前的选项集合,我们可以使用state来做到这一点。
pl.Config.state()
{'POLARS_AUTO_STRUCTIFY': None,
'POLARS_FMT_MAX_COLS': '8',
'POLARS_FMT_MAX_ROWS': '4',
'POLARS_FMT_NUM_DECIMAL': None,
'POLARS_FMT_NUM_GROUP_SEPARATOR': None,
'POLARS_FMT_NUM_LEN': None,
'POLARS_FMT_STR_LEN': '200',
'POLARS_FMT_TABLE_CELL_ALIGNMENT': None,
'POLARS_FMT_TABLE_CELL_LIST_LEN': None,
'POLARS_FMT_TABLE_CELL_NUMERIC_ALIGNMENT': None,
'POLARS_FMT_TABLE_DATAFRAME_SHAPE_BELOW': None,
'POLARS_FMT_TABLE_FORMATTING': None,
'POLARS_FMT_TABLE_HIDE_COLUMN_DATA_TYPES': None,
'POLARS_FMT_TABLE_HIDE_COLUMN_NAMES': None,
'POLARS_FMT_TABLE_HIDE_COLUMN_SEPARATOR': None,
'POLARS_FMT_TABLE_HIDE_DATAFRAME_SHAPE_INFORMATION': None,
'POLARS_FMT_TABLE_INLINE_COLUMN_DATA_TYPE': None,
'POLARS_FMT_TABLE_ROUNDED_CORNERS': None,
'POLARS_MAX_EXPR_DEPTH': None,
'POLARS_STREAMING_CHUNK_SIZE': None,
'POLARS_TABLE_WIDTH': None,
'POLARS_VERBOSE': None,
'POLARS_WARN_UNSTABLE': None,
'set_fmt_float': 'full',
'set_float_precision': None,
'set_thousands_separator': '',
'set_decimal_separator': '.',
'set_trim_decimal_zeros': False}
请注意,所有这些配置函数在内部都设置了环境变量。上述state命令的输出中列出了这些环境变量的名称。
作为替代方案,我们可以直接将这些值设置为环境变量。
注释:
在Python中,你可以使用os.environ来设置环境变量。但是,请注意,在程序开始执行之前设置环境变量通常是更常见的做法,因为某些库(包括Polars)可能在其初始化时读取环境变量,并在整个会话期间保持这些值不变。
然而,如果你确实需要在程序运行时更改Polars的配置,你可以尝试以下步骤:
- 确定你想要更改的配置选项对应的环境变量名称。
- 使用os.environ来设置或更改该环境变量的值。
- 如果Polars库在其内部缓存了配置值,并且没有提供刷新这些值的机制,那么你可能需要采取额外的步骤来确保更改生效。这可能包括重启你的程序或重新初始化Polars库。
但是,请注意,直接修改环境变量可能会影响程序的其他部分,以及在同一环境中运行的其他程序。因此,在采取这种做法时要格外小心。
import os
os.environ["POLARS_FMT_MAX_COLS"] = "6"
df
shape: (891, 15)
survived pclass sex … embark_town alive alone
i64 i64 str … str str bool
0 3 "male" … "Southampton" "no" false
1 1 "female" … "Cherbourg" "yes" false
… … … … … … …
1 1 "male" … "Cherbourg" "yes" true
0 3 "male" … "Queenstown" "no" true
我们可以使用 `restore_defaults` 来恢复 Polars 的默认配置设置。
pl.Config.restore_defaults()
注释:
这通常是指在对 Polars 库进行了一系列配置更改后,将其所有设置重置为初始状态或默认值。这样可以确保在测试不同配置或开发过程中不会遗留非预期的设置影响后续的数据处理操作。
Polars简明基础教程系列
Polars简明基础教程十:Numpy和Pandas的相互转换(2)
Polars简明基础教程九:Numpy和Pandas的相互转换(1)
Polars简明基础教程八:Series 和 DataFrame 以及它们之间的转换_B
Polars简明基础教程七:Series 和 DataFrame 以及它们之间的转换_A
Polars简明基础教程六:什么是Polars的“DataFrame(数据框)_下”
Polars简明基础教程五:什么是Polars的“DataFrame(数据框)_上”