比起 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 都能提供全面的工具包来释放数据分析工作的全部潜力。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bat 脚本 启动、停止、重启 SpringBoot 服务命令

启动 echo off chcp 65001 echo. title XXXX微服务项目后台程序 echo 启动SpringBoot服务 echo.:: 参数赋值 set JAVA_OPTS-Xms512m -Xmx1024m -XX:MetaspaceSize128m -XX:MaxMetaspaceSize512m :: 启动服务命令 java -jar -Dfile.encodingutf-8 %JAVA_OPTS% demo1.jar:: 因为…

【Docker】添加指定用户到指定用户组

运行Docker ps命令,报错:/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied 创建docker用户组 安装docker时默认已经创建好 sudo groupadd docker添加用户加入docker用户组 此处以用户user为例 sudo usermo…

flutter学习-day22-使用GestureDetector识别手势事件

文章目录 1. 介绍2. 使用2-1. 单击双击和长按2-2. 拖动和滑动2-3. 缩放 3. 注意点 1. 介绍 在 flutter 中,GestureDetector 是手势识别的组件,可以识别点击、双击、长按、拖动、缩放等手势事件,并且可以与子组件进行交互,构造函数…

cf918div4的E题讲解

虽然是div4,但是打的稀烂,哭死。 E题看了jiangly的题解豁然开朗,原来思路这么简单。被自己蠢到了,我傻傻的用前缀和,两层for枚举区间,不出意外TLE了,写的那一刻就知道要超时,但是没…

微信小程序全部内嵌H5遇到的问题记录

微信小程序内嵌H5遇到的问题 问题1:js-sdk的配置h5里面微信公众平台 问题2:业务域名的配置小程序开发微信公众平台 问题3:H5与小程序的消息传递。方案1H5 方案2H5页面小程序开发 方案3H5页面小程序页面 使用H5来开发APP,之后将该H…

TG7050CKN,TG7050SKN ,TG7050CMN,TG7050SMN

爱普生推出的温补晶振型号:TG7050CKN,TG7050SKN ,TG7050CMN,TG7050SMN频率范围为 10mhz ~ 54mhz 适用于广泛的频率需求。这几款的特点就是耐高温,温度可达105℃高温,而且都是高稳定性温补晶振,&…

Springboot单元测试mock踩坑

mock bean方式 //mock bean方式一MockBeanpublic UserMapper userMapper;//mock bean方式二Beanpublic LogMapper logMapper() {return Mockito.mock(LogMapper.class);} 如何注册mapstruct bean //扫描mapstruct包路径ComponentScan("xxx.xxx.mapstruct")public cl…

ERP与智能商品系统在供应链管理上有哪些区别和优势?

ERP系统和智能商品系统在供应链管理方面有以下区别和优势: 范围和综合性:ERP系统涵盖了企业的整个供应链管理过程,包括供应商管理、采购管理、库存管理、生产计划和物流管理等。它可以实现供应链上下游的信息共享和协同,提高供应…

计算机网络复习2

物理层 文章目录 物理层通讯基础奈奎斯特定理香农定理编码与调制交换传输介质(了解)物理层设备 通讯基础 数据信号码元信源信道信宿单工通道:只有一个方向半双工通道:不能同时发送和接收全双工通道 奈奎斯特定理 规定&#xff…

c++ map unordered_map 区别

目录 map访问,没有key会获取默认值 std::map 和 std::unordered_map 区别 map访问,没有key会获取默认值 在 C++ 的 std::map 中,如果使用 operator[] 访问一个不存在的键,它会创建一个新的键,并将其关联的值初始化为该值类型的默认值。如果值类型是内置类型(例如 int、…

下载完redis每次启动项目必须打开redis服务,否则不能运行,解决方法

redis-server.exe --service-install redis.windows.conf 在redis的目录启动终端运行此命令可以下载redis服务,然后在服务里面启动redis服务,之后就可以不用打开小黑框再启动了 redis下载地址: Redis下载安装教程_redis 3.2下载-CSDN博客

MFC:如何将JPEG等图片显示到对话框客户区

步骤: 0、打开VS2022创建一个基于对话框的MFC应用,项目名称命名为PicShow,创建完成后将对话框客户区中的"确定"按钮等内容删除(具体步骤略)。 1、建立菜单栏:文件->打开、退出。具体步骤&#x…

【C++核心编程(一)】

一、内存分区模型 C程序在执行时,将内存大方向划分为4个区域: 代码区:存放函数体的二进制代码,由操作系统进行管理的。 全局区:存放全局变量和静态变量以及常量。 栈区:由编译器自动分配释放,存放函数的…

《Vue2.X 进阶知识点》- 防 ElementUI Divider 分割线

前言 使用 el-divider 背景为白色是没问题的。 但当背景换成其它颜色,问题就出现了!! 仔细看原来是两层,默认背景色是白色。 想着把背景色改为透明应该能用,结果发现背面是一条实线,难怪要用白色遮挡…不符…

ChatGPT4.0(中文版)国内无限制免费版(附网址)

ChatGPT,由OpenAI开发的人工智能语言模型。它是你的数字对话伙伴,无论你有何问题或需要什么帮助,它都能提供有用的信息。 经过不断的研发和更新,ChatGPT的性能和功能得到了显著提升。现在,我们将重点介绍ChatGPT的两个…

【SpringCache】SpringCache详解及其使用,Redis控制失效时间

一、使用 在 Spring 中&#xff0c;使用缓存通常涉及以下步骤&#xff1a; 1、添加缓存依赖&#xff1a; 确保项目中添加了缓存相关的依赖。如果使用 Maven&#xff0c;可以在项目的 pom.xml 文件中添加 Spring Cache 的依赖。 <dependency><groupId>org.spring…

vue3全网最全教程-----(2)

目录 3.9.【watch】 * 情况一 * 情况二 情况三 * 情况四 情况五 3.10. 【watchEffect】 3.11. 【标签的 ref 属性】 3.12. 【props】 3.13. 【生命周期】 3.14. 【自定义hook】 3.9.【watch】 作用&#xff1a;监视数据的变化&#xff08;和Vue2中的watch作用一致&am…

TVS 管选型与 ESD 防护设计

文章目录 ESD 防护设计 TVS管的基础特性 TVS管的选型方法 TVS管布局细节 参考文献 ESD 防护设计 静电防护设计是让电路板外接的各类金属按钮开关在接触到外界空气放电或接触放电时&#xff0c;在这种瞬间出现的大能量注入到电路板后&#xff0c;能够通过某种设计好的通道泄…

VSCode + vite + vue3断点调试配置

没想到这个配置我搞了一上午&#xff0c;网上很多的配置方案都没有效果。总算搞定了&#xff0c;特此记录一下。 首先需要在.vscode文件夹下面创建launch.json配置文件。然后输入如下配置&#xff1a; {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。//…

「Verilog学习笔记」状态机与时钟分频

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 状态机写法 timescale 1ns/1nsmodule huawei7(input wire clk ,input wire rst ,output reg clk_out );//*************code***********//parameter S0 0, S1 1 , S2…