说明
《Python Polars》 教程正在筹划更新中,敬请期待!Polars 是一个高性能的数据处理库,特别适用于大数据集和需要并行计算的场景。如果你在处理大数据时遇到性能瓶颈,可以考虑尝试 Polars,它的延迟计算和并行化机制可以显著提升处理效率。
Polars 是一个高效的 DataFrame 库,支持多种数据格式的读取和导出,广泛应用于数据处理与分析中。与 Pandas 相比,Polars 在处理大规模数据时具有更高的性能,特别是在多核处理和内存优化方面。
读取 CSV 文件应该最常见的操作:
df = pl.read_csv("docs/assets/data/path.csv")
写入 CSV:
df = pl.DataFrame({"foo": [1, 2, 3], "bar": [None, "bak", "baz"]})
df.write_csv("docs/assets/data/path.csv")
如何使用BytesIO对象解析字符串日期。
from io import BytesIO
data = BytesIO(
b"ID,Name,Birthday\n"
b"1,Alice,1995-07-12\n"
b"2,Bob,1990-09-20\n"
b"3,Charlie,2002-03-08\n"
)
pl.read_csv(data, try_parse_dates=True)
Polars 允许您「扫描」CSV输入。扫描会延迟文件的实际解析,而是返回一个名为 LazyFrame
的延迟计算保持器。
df = pl.scan_csv("docs/assets/data/path.csv")
延迟计算的优势我们后续教程会详细介绍。
要读取 Excel 和写入 Excel 要安装第三方库:
pip install fastexcel xlsx2csv openpyxl
pip install xlsxwriter
读取:
df = pl.read_excel("docs/assets/data/path.xlsx")
# 指定标签页
df = pl.read_excel("docs/assets/data/path.xlsx", sheet_name="Sales")
写入:
df.write_excel("docs/assets/data/path.xlsx")
# 指定工作表
df.write_excel("docs/assets/data/path.xlsx", worksheet="Sales")
加载或写入 Parquet 文件非常快,因为内存中 Polars DataFrame 中的数据布局在许多方面都反映了磁盘上 Parquet 文件的布局。
与CSV不同,Parquet是一种柱状格式。这意味着数据存储在列中而不是行中。这是一种更有效的数据存储方式,因为它允许更好的压缩和更快的数据访问。
读取和写入:
df = pl.read_parquet("docs/assets/data/path.parquet")
df.write_parquet("docs/assets/data/path.parquet")
Polars允许您扫描输入,扫描会延迟文件的实际解析,而是返回一个名为 LazyFrame 的延迟计算保持器。
df = pl.scan_parquet("docs/assets/data/path.parquet")
Polars 可以读写标准JSON和换行符分隔的JSON(NDJSON)。
df = pl.read_json("docs/assets/data/path.json")
df = pl.read_ndjson("docs/assets/data/path.json")
df.write_json("docs/assets/data/path.json")
# 扫描读取
df = pl.scan_ndjson("docs/assets/data/path.json")
Polars 可以根据您的需求和内存压力不同地处理多个文件。要将多个文件读入单个 DataFrame,我们可以使用 globbing 模式:
df = pl.read_csv("docs/assets/data/my_many_files_*.csv")
# 看看查询计划
pl.scan_csv("docs/assets/data/my_many_files_*.csv").show_graph()
Polars 还支持并行读取和处理。如果你的文件不必在一个表中,你也可以为每个文件构建一个查询计划,并在 Polars 线程池上并行执行它们。所有查询计划的执行都是并行的,不需要任何通信。如:
import glob
import polars as pl
queries = []
for file in glob.glob("docs/assets/data/my_many_files_*.csv"):
q = pl.scan_csv(file).group_by("bar").agg(pl.len(), pl.sum("foo"))
queries.append(q)
dataframes = pl.collect_all(queries)
print(dataframes)
Polars 可以使用pl.read_database_uri 和 pl.read_database 函数从数据库中读取数据。
import polars as pl
uri = "postgresql://username:password@server:port/database"
query = "SELECT * FROM foo"
pl.read_database_uri(query=query, uri=uri)
另一方面,如果您想通过使用 SQLAlchemy 等库创建的连接引擎进行连接,请使用 pl.read_database。
import polars as pl
from sqlalchemy import create_engine
conn = create_engine(f"sqlite:///test.db")
query = "SELECT * FROM foo"
pl.read_database(query=query, connection=conn.connect())
写入数据库:
uri = "postgresql://username:password@server:port/database"
df = pl.DataFrame({"foo": [1, 2, 3]})
df.write_database(table_name="records", connection=uri)
# 使用 ADBC 连接数据库
uri = "postgresql://username:password@server:port/database"
df = pl.DataFrame({"foo": [1, 2, 3]})
df.write_database(table_name="records", connection=uri, engine="adbc")
todo
todo
todo
更新时间:2025-01-18 14:50:58 标签:polars python 数据读取 数据导出