前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Polars:一个正在崛起的新数据框架

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

作者头像
IT大咖说
发布2022-03-04 13:11:44
5K0
发布2022-03-04 13:11:44
举报
文章被收录于专栏:IT大咖说

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大咖说的热心支持!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT大咖说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ◆ 安装
  • ◆ 访问表元素
  • ◆ 用Polars作图
  • ◆ Eager和Lazy的API
  • ◆ 最后的思考
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档