比起 Pandas, 你更需要 Polars:详细指南

在数据分析领域,Python 由于其多功能性和广泛的库生态系统而成为一种流行的语言。数据处理和分析在提取见解和做出明智决策方面发挥着至关重要的作用。然而,随着数据集的规模和复杂性不断增长,对高性能解决方案的需求变得至关重要。

有效地处理大型数据集需要能够提供快速计算和优化操作的工具。这就是 Polars 出现的原因。Polars 是一个强大的开源库,专为 Python 中的高性能数据操作和分析而设计。

Polars 功能

Polars 是一个完全用 Rust 编写的 DataFrame 库,旨在为 Python 开发人员提供可扩展且高效的数据处理框架,并被认为是非常流行的 pandas 库的替代品。它提供了广泛的功能,便于各种数据操作和分析任务。使用 Polars 的一些主要功能和优势包括:

1.速度和性能

Polars 在设计时充分考虑了性能。它利用并行处理和内存优化技术,使其处理大型数据集的速度明显快于传统方法。

2. 数据操作能力

Polars 为数据操作提供了一个全面的工具包,包括过滤、排序、分组、联接和聚合数据等基本操作。虽然由于其相对新颖,Polars 可能没有像 Pandas 那样广泛的功能,但它涵盖了 Pandas 中大约 80% 的常见操作。

3. 富有表现力的语法

Polars 采用简洁直观的语法,使其易于学习和使用。它的语法让人想起流行的 Python 库,如 Pandas,允许用户快速适应 Polars 并利用他们现有的知识。

4. DataFrame 和序列结构

Polars 的核心是 DataFrame 和 Series 结构,它们为处理表格数据提供了熟悉且强大的抽象。Polars 中的 DataFrame 操作可以链接在一起,从而实现高效、简洁的数据转换。

5. Polars 支持延迟评估

Polars 包含延迟评估,这涉及检查和优化查询以提高其性能并最大限度地减少内存消耗。使用 Polars 时,该库会分析您的查询,并寻找机会加快查询的执行速度或减少内存使用量。相比之下,Pandas 只支持立即评估,即在遇到表达式时立即对其进行评估。

有了 Pandas,为什么还要 Polars

Pandas 是一个被广泛采用的库,以其灵活性和易用性而闻名。然而,在处理大型数据集时,由于 Pandas 依赖于单线程执行,它可能会遇到性能瓶颈。随着数据集大小的增加,处理时间可能会变得非常长,从而限制了工作效率。

Polars 专为高效处理大型数据集而设计。凭借其惰性评估策略和并行执行能力,Polars 擅长快速处理大量数据。通过在多个 CPU 内核之间分配计算,Polars 利用并行性来提供令人印象深刻的性能提升。

image4.png

安装 Polars

Polars 可以通过 Python 包管理器 pip 进行安装。打开命令行界面并运行以下命令:

pip install polars

使用 Polars 中加载数据集

Polars 提供了从各种来源加载数据的便捷方法,包括 CSV 文件、Parquet 文件和 Pandas DataFrames。读取 CSV 或 parquet 文件的方法与 Pandas 库相同。

# read csv file
import polars as pl
data = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')


# check the head
data.head()

输出:

image2.png

的类型是:polars.DataFrame

type(data)
>>> polars.dataframe.frame.DataFrame

Polars 的常见数据操作函数

Polars 提供了一套全面的数据操作功能,让您可以轻松选择、过滤、排序、转换和清理数据。让我们来看一些常见的数据操作任务,以及如何使用 Polars 完成这些任务:

1. 选择和筛选数据

若要从 DataFrame 中选择特定列,可以使用 select() 该方法。下面是一个示例:

import polars as pl


# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')


# Select specific columns: carat, cut, and price
selected_df = df.select(['Carat Weight', 'Cut', 'Price'])


# show selected_df head
selected_df.head()

输出:

image1.png

可以使用 filter()方法根据某些条件筛选行。例如,要筛选克拉大于 1.0 的行,您可以执行以下操作:

import polars as pl


# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')


# filter the df with condition
filtered_df = df.filter(pl.col('Carat Weight') > 2.0)


# show filtered_df head
filtered_df.head()

输出:

image9.png

2. 对数据进行排序和排序

Polars 提供了基于一列或多列对 DataFrame 进行排序的方法:sort()。下面是一个示例:

import polars as pl


# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')


# sort the df by price
sorted_df = df.sort(by='Price')


# show sorted_df head
sorted_df.head()

输出:

image12.png

3. 处理缺失值

Polars 提供了处理缺失值的便捷方法。该方法允许您删除包含任何缺失值的行:drop_nulls()

import polars as pl


# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')


# drop missing values
cleaned_df = df.drop_nulls()


# show cleaned_df head
cleaned_df.head()

输出:

image5.png

或者,可以使用 fill_nulls()方法将缺失值替换为指定的默认值或填充方法。

4. 根据特定列对数据进行分组

若要根据特定列对数据进行分组,可以使用 groupby()方法。以下示例按列 Cut对数据进行分组,并计算每个组 Price的平均值:

import polars as pl


# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')


# group by cut and calc mean of price
grouped_df = df.groupby(by='Cut').agg(pl.col('Price').mean())


# show grouped_df head
grouped_df.head()

输出:

image8.png

在上面的输出中,您可以按 Cut 查看钻石的平均价格。

5. 连接和组合 DataFrame

Polars 为连接和组合数据帧提供了灵活的选项,允许您合并和连接来自不同来源的数据。若要执行联接操作,可以使用 join()方法。以下示例演示了基于公共列的两个 DataFrame 之间的内部联接:

import polars as pl


# Create the first DataFrame
df1 = pl.DataFrame({
    'id': [1, 2, 3, 4],
    'name': ['Alice', 'Bob', 'Charlie', 'David']
})


# Create the second DataFrame
df2 = pl.DataFrame({
    'id': [2, 3, 5],
    'age': [25, 30, 35]
})


# Perform an inner join on the 'id' column
joined_df = df1.join(df2, on='id')


# Display the joined DataFrame
joined_df

输出:

image6.png

在此示例中,我们使用构造函数创建两个 DataFrames(df1df2)。第一个 DataFrame 包含 id和 name,第二个 DataFrame 包含 id 和 age。然后,我们使用join()方法对列执行内部联接。

集成和互通性

Polars 提供与其他常用 Python 库的无缝集成,使数据分析师能够利用各种工具和功能。让我们来探讨一下集成的两个关键方面:与其他库的配合以及与 Pandas 的互通性。

将 Polars 与其他 Python 库集成

Polars 可方便地与 NumPy 和 PyArrow 等库集成,使用户能够在其数据分析工作流程中结合多种工具的优势。通过 NumPy 集成,Polars 利用 NumPy 强大的科学计算能力,毫不费力地在 Polars DataFrames 和 NumPy 数组之间进行转换。这种集成确保了数据的平稳过渡,并允许分析师将 NumPy 函数直接应用于 Polars 数据。

同样,通过利用 PyArrow,Polars 优化了 Polars 和基于 Arrow 的系统之间的数据传输。这种集成可以无缝处理以 Arrow 格式存储的数据,并利用 Polars 的高性能数据处理功能。

将 Polars DataFrames 转换为 Pandas DataFrames

Polars 提供 Polars DataFrames 到 Pandas DataFrames 的无缝转换。下面是一个示例,说明了从 Polars 到 Pandas 的转换。

import polars as pl
import pandas as pd


# Create a Polars DataFrame
df_polars = pl.DataFrame({
    'column_A': [1, 2, 3],
    'column_B': ['apple', 'banana', 'orange']
})


# Convert Polars DataFrame to Pandas DataFrame
df_pandas = df_polars.to_pandas()


# Display the Pandas DataFrame
df_pandas

输出:

image3.png

结论

Polars 是一个强大的库,用于在 Python 中进行高性能数据操作和分析。它的速度和性能优化使其成为高效处理大型数据集的理想选择。

凭借其富有表现力的语法和 DataFrame 结构,Polars 为数据操作任务提供了熟悉且直观的界面。此外,Polars 与 NumPy 和 PyArrow 等其他 Python 库无缝集成,扩展了其功能并允许用户利用多样化的工具生态系统。

将 Polars DataFrames 转换为 Pandas DataFrames的能力确保了互操作性,并有助于将 Polars 集成到现有工作流程中。无论您是在处理复杂的数据类型、处理大型数据集,还是寻求性能改进,Polars 都能提供全面的工具包来释放数据分析工作的全部潜力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/274839.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JMeter控制器之While控制器

1. 背景 存在一些使用场景,比如:某个请求必须等待上一个请求正确响应后才能开始执行。或者,不断去请求某个接口的响应结果,当它达到某个状态时才开始后续请求。(例如:某系统中存在一个功能:判断…

Android : 画布的使用 简单应用

示例图: MyView.java: package com.example.demo;import android.content.Context; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.Vi…

Linux内核定时器-模块导出符号表

Linux内核定时器 定时器的当前时间如何获取? jiffies:内核时钟节拍数 jiffies是在板子上电这一刻开始计数,只要 板子不断电,这个值一直在增加(64位)。在 驱动代码中直接使用即可。 定时器加1代表走了多长时间&#xff…

一.windows2012搭建fpt服务器和常见端口介绍

一.windows2012搭建fpt服务器和常见端口介绍 1.打开防火墙2.创建组2.1打开计算机管理2.2创建组并且设置名称和描述 3.创建用户3.1设置用户密码和名称3.2把用户归属于组3.3把user删除掉3.4点击添加然后点高级3.5点击立即查找选择之前设定的组 4.安装ftp服务器4.1点击添加角色和功…

重生奇迹mu中玩家之间的交易操作

重生奇迹mu游戏中的直接交易 在重生奇迹mu中的交易总共有四种方式。第一种就是玩家之间直接进行交易,具体操作就是点击你所要交易的玩家,这个点击的意思是指你把鼠标移动到这名玩家的角色身上,然后你就锁定了此玩家,同时游戏界面…

每日一题 2735. 收集巧克力(中等)

暴力枚举,真难甭 class Solution:def minCost(self, nums: List[int], x: int) -> int:n len(nums)f nums[:]ans sum(f)for k in range(1, n):for i in range(n):f[i] min(f[i], nums[(i k) % n])ans min(ans, k * x sum(f))return ans

深入探索MongoDB集群模式:从高可用复制集

MongoDB复制集概述 MongoDB复制集主要用于实现服务的高可用性,与Redis中的哨兵模式相似。它的核心作用是数据的备份和故障转移。 复制集的主要功能 数据复制:数据写入主节点(Primary)时,自动复制到一个或多个副本节…

【头歌实训】Spark 完全分布式的安装和部署(新)

文章目录 第1关: Standalone 分布式集群搭建任务描述相关知识课程视频Spark分布式安装模式主机映射免密登录准备Spark安装包配置环境变量修改 spark-env.sh 配置文件修改 slaves 文件分发安装包启动spark验证安装 编程要求测试说明答案代码 第1关: Stand…

Google Chrome 现在会在后台扫描泄露的密码

谷歌表示,Chrome 安全检查功能将在后台运行,检查网络浏览器中保存的密码是否已被泄露。 如果桌面用户正在使用标记为危险的扩展程序(从 Chrome Web Store 中删除)、最新的 Chrome 版本,或者如果启用安全浏览来阻止 Go…

uniapp Vue3 日历 可签到 跳转

上干货 <template><view class"zong"><view><view class"top"><!-- 上个月 --><view class"sgy" click"sgy">◀</view><view class"nianyue">{{ year }}年{{ month 1 }}…

uniapp Vue3 面包屑导航 带动态样式

上干货 <template><view class"bei"><view class"container"><view class"indicator"></view><!-- 遍历路由列表 --><view v-for"(item, index) in routes" :key"index" :class&quo…

数据结构入门到入土——List的介绍

目录 一&#xff0c;什么是List&#xff1f; 二&#xff0c;常见接口介绍 三&#xff0c;List的使用 一&#xff0c;什么是List&#xff1f; 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection。 Collection也是一个接口&#xff0c;该接口中规范了后序容…

鸿蒙Harmony(八)ArkUI--状态管理器之@State

状态管理 在声明式UI中&#xff0c;是以状态驱动视图更新 状态&#xff1a;指驱动视图更新的数据&#xff08;被装饰器标记的变量&#xff09; StateProp 和 LinkProvide和 Consume State State装饰器标记的变量必须初始化&#xff0c;不能为空值State支持Object 、class、…

音视频学习(二十二)——rtmp发流(tcp方式)

前言 本文主要介绍自研的RtmpStreamSender.dll&#xff0c;rtmp库提供接口接收裸流数据&#xff0c;支持将裸流数据封装为flv格式并通过rtmp协议发流。 关于rtmp协议基础介绍可查看&#xff1a;https://blog.csdn.net/www_dong/article/details/131026072 关于rtmp收流介绍可…

java设计模式学习之【状态模式】

文章目录 引言状态模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用状态示例代码地址 引言 设想你正在使用一个在线视频播放器观看电影。随着你的互动&#xff0c;播放器可能处于不同的状态&#xff1a;播放、暂停、缓冲或结束。每个状态下&#xff0c;播放…

工具系列:TimeGPT_(6)同时预测多个时间序列

TimeGPT提供了一个强大的多系列预测解决方案&#xff0c;它涉及同时分析多个数据系列&#xff0c;而不是单个系列。该工具可以使用广泛的系列进行微调&#xff0c;使您能够根据自己的特定需求或任务来定制模型。 # Import the colab_badge module from the nixtlats.utils pac…

HTML+CSS制作动漫绿巨人

🎀效果展示 🎀代码展示 <!DOCTYPE html> <html lang="en" > <head>

115基于matlab的用于铣削动力学建模的稳定性叶瓣图分析(stablity lobe)

基于matlab的用于铣削动力学建模的稳定性叶瓣图分析(stablity lobe)&#xff0c;程序已调通&#xff0c;可直接运行。 115matlab铣削动力学 (xiaohongshu.com)

ajax请求——XMLHttpRequest请求

个人练习笔记-----Ajax01 一、GET <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</t…

【Pytorch】学习记录分享9——PyTorch新闻数据集文本分类任务实战

【Pytorch】学习记录分享9——PyTorch新闻数据集文本分类任务 1. 认为主流程code2. NLP 对话和预测基本均属于分类任务详细见3. Tensorborad 1. 认为主流程code import time import torch import numpy as np from train_eval import train, init_network from importlib impo…