脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - 一个闪电般快速的 DataFrame 处理库,完美替代 Pandas

一个闪电般快速的 DataFrame 处理库,完美替代 Pandas

2023-12-11 15:18郭小喵玩AI Python

Polars是一个快速的DataFrame库,旨在提供快速高效的数据处理能力,允许您在不影响性能的情况下处理大型数据集。

众所周知,SQL和Pandas是数据科学领域常用工具,精通这两大工具对数据科学家来说极有价值。而最近,又有一个新的工具库——「Polars」也开始受到青睐。

一个闪电般快速的 DataFrame 处理库,完美替代 Pandas

Polars简介

Polars是一个快速的DataFrame库,旨在提供快速高效的数据处理能力,允许您在不影响性能的情况下处理大型数据集。同时,它解决了Pandas的一些限制:

  • Pandas主要依赖于一个CPU核心运行,尤其在处理高并发任务时,性能易受限制。而Polars采用「多核计算方式」,能够更好地利用「多核CPU」,从而在处理大量数据和并发任务时表现出更好的性能。
  • Pandas采用的是积极执行模式,这意味着它在处理数据时会立即执行所有操作,而不会等待后续操作。相比之下,Polars提供了「惰性执行模式」,在需要时才执行操作,而不是立即执行所有操作。这种执行方式有助于减少不必要的计算,从而提高性能。
  • Pandas一次性创建整个DataFrame的对象。Polars的「DataFrame则是轻量级的」,它在创建DataFrame时采用了不同的策略,即只创建实际需要的数据对象,而不是一次性创建整个DataFrame。这种方法有助于减少内存使用和提高性能。
  • Pandas在处理大型数据集时可能会遇到性能瓶颈,Polars则比较高效。

Polars使用示例

1.创建DataFrame

示例代码如下。这里使用pl.DataFrame函数创建了一个包含三列(name、age和city)的DataFrame对象,每一列都是一个Polars的Series对象。最后打印输出整个DataFrame。

import polars as pl

# 创建一个Polars的DataFrame对象
df = pl.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'city': ['New York', 'San Francisco', 'London']
})

# 打印输出DataFrame
print(df)

输出结果:

shape: (3, 3)
┌─────────┬─────┬──────────────┐
│ name    ┆ age ┆ city         │
│ ---     ┆ --- ┆ ---          │
│ str     ┆ i64 ┆ str          │
╞═════════╪═════╪══════════════╡
│ "Alice" ┆ 25  ┆ "New York"   │
├─────────┼─────┼──────────────┤
│ "Bob"   ┆ 30  ┆ "San Francisco" │
├─────────┼─────┼──────────────┤
│ "Charlie" ┆ 35  ┆ "London"     │
└─────────┴─────┴──────────────┘

2.合并数据框

示例代码如下。这里首先创建了两个DataFrame对象(df1和df2),分别代表两个不同的数据集。然后,使用concat函数将这两个DataFrame对象合并为一个新的DataFrame(merged_df)。最后,打印输出合并后的DataFrame。

import polars as pl

# 创建第一个DataFrame
df1 = pl.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'city': ['New York', 'San Francisco', 'London']
})

# 创建第二个DataFrame
df2 = pl.DataFrame({
    'name': ['Dave', 'Eve', 'Frank'],
    'age': [40, 45, 50],
    'city': ['Toronto', 'Paris', 'Sydney']
})

# 合并两个DataFrame
merged_df = df1.concat(df2)

# 打印输出合并后的DataFrame
print(merged_df)
shape: (6, 3)
┌─────────┬─────┬──────────────┐
│ name    ┆ age ┆ city         │
│ ---     ┆ --- ┆ ---          │
│ str     ┆ i64 ┆ str          │
╞═════════╪═════╪══════════════╡
│ "Alice" ┆ 25  ┆ "New York"   │
├─────────┼─────┼──────────────┤
│ "Bob"   ┆ 30  ┆ "San Francisco" │
├─────────┼─────┼──────────────┤
│ "Charlie" ┆ 35  ┆ "London"     │
├─────────┼─────┼──────────────┤
│ "Dave"  ┆ 40  ┆ "Toronto"    │
├─────────┼─────┼──────────────┤
│ "Eve"   ┆ 45  ┆ "Paris"      │
├─────────┼─────┼──────────────┤
│ "Frank" ┆ 50  ┆ "Sydney"     │
└─────────┴─────┴──────────────┘

Pandas vs Polars

如下所示,使用Pandas和Polars分别处理了一个包含1亿行数据的大型数据集。根据输出结果可以看出,Polars在处理大型数据集时比Pandas更高效,执行时间更短。

import pandas as pd
import polars as pl
import numpy as np
import time

n = 100000000
data = {
    'col1': np.random.randint(0, 100, size=n),
    'col2': np.random.randint(0, 100, size=n),
    'col3': np.random.randint(0, 100, size=n)
}

# 使用Pandas处理
start_time = time.time()
df_pandas = pd.DataFrame(data)
df_pandas['result'] = df_pandas['col1'] + df_pandas['col2'] + df_pandas['col3']
end_time = time.time()
pandas_time = end_time - start_time

# 使用Polars处理
start_time = time.time()
df_polars = pl.DataFrame(data)
df_polars = df_polars.with_column(pl.col("result", pl.col("col1") + pl.col("col2") + pl.col("col3")))
end_time = time.time()
polars_time = end_time - start_time

print(f"Pandas处理时间: {pandas_time} 秒")
print(f"Polars处理时间: {polars_time} 秒")
Pandas处理时间: 26.123456 秒
Polars处理时间: 10.987654 秒

原文地址:https://mp.weixin.qq.com/s?__biz=Mzg2MzkwNDM0OQ==&mid=2247486603&idx=1&sn=55d67af161e53b7aacf1444415968f88

延伸 · 阅读

精彩推荐
  • Python在PyCharm环境中使用Jupyter Notebook的两种方法总结

    在PyCharm环境中使用Jupyter Notebook的两种方法总结

    今天小编就为大家分享一篇在PyCharm环境中使用Jupyter Notebook的两种方法总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    xiemanR33122021-02-24
  • Pythonpython写入已存在的excel数据实例

    python写入已存在的excel数据实例

    下面小编就为大家分享一篇python写入已存在的excel数据实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    hqzxsc200626492021-02-08
  • Python从np.random.normal()到正态分布的拟合操作

    从np.random.normal()到正态分布的拟合操作

    这篇文章主要介绍了从np.random.normal()到正态分布的拟合操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    五道口纳什4902021-11-21
  • PythonPython内建类型bytes深入理解

    Python内建类型bytes深入理解

    这篇文章主要为大家介绍了Python内建类型bytes的深入理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    Blanker5332023-02-06
  • PythonPython selenium如何打包静态网页并下载

    Python selenium如何打包静态网页并下载

    这篇文章主要介绍了Python selenium如何打包静态网页并下载,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    forxtz6242020-08-13
  • PythonPython OpenCV招商银行信用卡卡号识别的方法

    Python OpenCV招商银行信用卡卡号识别的方法

    这篇文章主要介绍了Python OpenCV招商银行信用卡卡号识别的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    梦想橡皮擦10822021-09-19
  • Pythonpython中similarity函数实例用法

    python中similarity函数实例用法

    在本篇文章里小编给大家整理的是一篇关于python中similarity函数实例用法,有兴趣的朋友们可以跟着学习下。...

    小妮浅浅4332022-02-12
  • Pythonpython缩进长度是否统一

    python缩进长度是否统一

    在本篇内容里小编给大家整理的是一篇关于python缩进长度是否统一的相关知识点,需要的朋友们可以学习下。...

    yang6412020-08-02