Polars:一个正在崛起的新数据框架

2022-03-04 13:11:44 浏览数 (1)

Polar的标志

表列数据是任何数据科学家的面包和主食。几乎所有的数据湖和仓库都使用数据表格来处理数据,并提取关键特征进行处理。最常用的数据制表方法之一是Dataframes。它们在收集和清理来自限定文本文件、电子表格和数据库查询的数据方面提供了灵活性。最常用的数据框架是Pandas,这是一个python包,对于有限的数据来说,它的表现足够好。然而,如果数据太大,Pandas无法处理,但对Spark等分布式文件管理系统来说又太小,怎么办?Polars试图弥补这一差距。

Polars是用Rust编写的,以获得更强大的性能,并使用Apache Arrow(2)作为内存模型。PyPolars(目前更新为Polars)是一个围绕Polars的python包装器。它有类似于Pandas的API,这使得它更容易过渡。

◆ 安装

安装Polars很简单。Polars可以用pip进行安装,方法如下。

代码语言:javascript复制
pip install polars

不幸的是,Polars目前还不能在Anaconda上使用。如果情况发生变化,我们会进行更新。

免责声明:由于稳定版本尚未发布,创建并激活一个新的环境来安装Polars。

导入Polars和导入Pandas一样顺利。

代码语言:javascript复制
import polars as pl

让我们来读一下Polars提供的其中一个数据集。

代码语言:javascript复制
df = pl.read_csv('my_data.csv')

Polars的最新版本(v=0.8.10)支持csv、ipc、json、parquet和sql。

为了检查你的数据是否被加载,你可以像Pandas一样使用head。

代码语言:javascript复制
df.head()

同样,最后10个条目,数据框架的形状和类型可以用以下代码检查。

代码语言:javascript复制
df.tail(10)
df.shape
type(df)

目前的版本没有提供导入压缩分隔文件或读取文件前n行的选项。对于一个加载的Polars数据框架,describe和dtype提供了各列数据类型的信息。列名可以用df.columns检查。

df.describe()中的特征可以传递给Pandas,以便更好地显示与。

代码语言:javascript复制
df.description().to_pandas()

◆ 访问表元素

Polars可以通过与pandas.DataFrame.iloc函数类似的行索引直接访问表的行,如下所示。

代码语言:javascript复制
df[:10] #访问前十行。

列可以通过名称直接引用。

代码语言:javascript复制
df['name'] #找到'name'列

可以通过向数据框架传递索引列表来选择指数。

代码语言:javascript复制
df[[1,4,10,15], :]

可以使用内置函数slice来完成对索引的切分

代码语言:javascript复制
df.slice(0,5) #从索引0和5行开始对df进行切片。

Polars还可以用条件布尔值对数据帧进行切片。

代码语言:javascript复制
df[df['sale']>=10]

Polars也有.value_counts、.unique和.dtypes函数

代码语言:javascript复制
df['name'].value_counts() #返回带有出现次数的唯一值
df['name'].unique() #返回列中唯一值的列表
df.dtypes() #返回数据类型

Polars也支持Groupby和排序。

代码语言:javascript复制
df.groupby('country').sort('products',reverse=True)

Polars中的apply()和map()。

与Pandas类似,Polars支持.apply()和.map()函数。

代码语言:javascript复制
df['value'].map(lambda x: 'high' if x>=5 else 'low')
df['values].apply(my_func)

唯一需要注意的是,字典不能被传递给这些函数。

代码语言:javascript复制
mydict = {k:v for v,k in enumerate(df['catagories'].unique()) }
df['catagories'].map(mydict) #这将抛出一个错误

◆ 用Polars作图

Polars,就像Pandas一样,有内置的绘图功能。它还允许与Matplotlib和Seaborn集成。

代码语言:javascript复制
import matplotlib.pyplot as plt
fig,ax=plt.subplots(figsize=(10,5))
ax.hist(df['name'])。
plt.show()

◆ Eager和Lazy的API

Polars的Eager和Lazy APIs

Polars(引申为Pandas)默认采用了Eager的运行,这意味着函数会实时映射到每个数据。但随着表的规模越来越大,Lazy的实现在加载和转换选定的值时更有效率。一个示例实现看起来如下。

代码语言:javascript复制
from polars.lazy import *
lazy_df = pl.scan_csv('large_dataset.csv',ignore_erros=True)
filt_lazy_df = (lazy_df.filter(col('name').str_lengths() > 5).filter(col('country').str_contains(r'US-Germany-France').is_not()))

与Spark的Lazy 实现类似,filt_lazy_df是在调用collect函数时进行评估的。

代码语言:javascript复制
lazy_df.collect()

如前所述,Polars最吸引人的地方是其转换大型数据集的能力。h2oai有不同数据集之间的基准性能表。根据该基准,在一个1,000,000,000x9的50GB文件上应用的。

◆ 最后的思考

Polars在对Pandas来说可能太大的非常大的数据集上有很好的前景,它的快速性能。它的实现与Pandas类似,支持映射和应用函数到数据框架中的系列。绘图很容易生成,并与一些最常见的可视化工具集成。此外,它允许在没有弹性分布式数据集(RDDs)的情况下进行Lazy评估。

总的来说,Polars可以为数据科学家和爱好者提供更好的工具,将数据导入到数据框架中。有很多Pandas可以做的功能目前在Polars上是不存在的。在这种情况下,强烈建议将数据框架投向Pandas。

来源:

https://www.toutiao.com/a7066136701642719783/?log_from=4ae1bc3f027ee_1645423841536

“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com

来都来了,走啥走,留个言呗~

 IT大咖说  |  关于版权

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!

  • 相关推荐
  • 推荐文章
  • 整洁架构、DDD 和 CQRS 简介
  • 2022技术趋势预测,Python、Java占主导,Rust、Go增长迅速,元宇宙成为关注焦点
  • 400 行 C 代码实现一个虚拟机
  • 如何通过查询实施数据解放?
  • 什么是流式SQL,它有什么用?
  • 卷起来了!手把手带你写一个中高级程序员必会的分布式RPC框架
  • 大数据技术SpringBoot框架---实现前后端分离(MVC)对数据进行可视化
  • 2021年11个最佳无代码/低代码后端开发利器
  • 事件驱动的基于微服务的系统的架构注意事项
  • 2022年的五个大数据趋势

0 人点赞