演算法金 | 來了,pandas 2.0

算法金「全网同名」發表於2024-07-11


大俠幸會,在下全網同名「演算法金」 0 基礎轉 AI 上岸,多個演算法賽 Top 「日更萬日,讓更多人享受智慧樂趣」

今日 210+/10000,內含

Pandas 是一個強大的資料分析庫,廣泛應用於科學研究、金融分析、商業智慧等領域。它提供了高效的資料結構和資料分析工具,使得處理和分析資料變得更加簡單和高效。Pandas 的核心資料結構是 DataFrame,它可以方便地進行資料清洗、變換、合併和聚合操作,這使得 Pandas 成為資料科學家和分析師的必備工具。

  • 資料清洗:Pandas 提供了豐富的功能來處理缺失值、重複資料和資料型別轉換。
  • 資料變換:可以輕鬆地對資料進行排序、過濾、分組和變換操作。
  • 資料合併:支援多種方式的資料合併和連線,如 merge、join 和 concat。
  • 資料聚合:透過 groupby 操作,可以對資料進行高效的聚合和彙總。

Pandas 的易用性和強大功能,使得它在資料分析中佔據了重要地位。

Pandas 2.0 的釋出背景和主要目標

隨著資料量的不斷增長和資料分析需求的增加,Pandas 的效能和功能也需要不斷提升。Pandas 2.0 的釋出背景主要包括以下幾點:

  • 效能最佳化需求:大規模資料的處理對效能提出了更高的要求,Pandas 2.0 透過引入 Arrow Array 等技術,顯著提升了資料處理的效率。
  • 統一的空值處理:在資料分析過程中,空值處理是一個常見且重要的問題。Pandas 2.0 引入了 pd.NA 統一表示空值,簡化了空值處理的邏輯。
  • 型別提示的改進:為了提高程式碼的可讀性和開發效率,Pandas 2.0 提供了更好的型別提示支援,幫助開發者進行型別檢查和自動補全。
  • 擴充套件介面的需求:隨著使用者需求的多樣化,Pandas 2.0 提供了更多的可擴充套件介面,使得開發者可以更方便地擴充套件和定製 Pandas 的功能。

Pandas 2.0 的主要目標是提升效能、增強資料處理能力和改進開發者體驗,使得 Pandas 在處理大規模資料和複雜資料分析任務時更加高效和便捷。

Pandas 2.0 的新特性

2.1 Arrow Array

2.0 最大的亮點是增加了對pyarrow的支援,甚至被定義為一場革命(revolution)。

Apache Arrow 是一個用於記憶體中的跨平臺資料表示格式,旨在提高資料處理的速度和效率。它透過定義一種列式記憶體格式,使資料在不同的計算引擎之間可以高效共享,減少資料的序列化和反序列化開銷,從而提升效能。

Arrow 的主要特點包括:

  • 列式儲存:資料按列儲存,適合高效的壓縮和向量化操作。
  • 跨平臺相容:支援多種程式語言和計算引擎,如 Python、R、Java、Spark 等。
  • 高效能:最佳化了記憶體訪問模式,提高了資料處理的速度。

Arrow Array 的優點和使用場景

Pandas 2.0 引入了 Arrow Array 作為新的資料結構,帶來了許多優點:

  • 高效的記憶體使用:Arrow Array 使用列式儲存,減少了記憶體佔用。
  • 快速的資料訪問:最佳化的記憶體訪問模式和向量化操作,提高了資料處理的速度。
  • 跨平臺資料共享:可以在不同的計算引擎之間高效地共享資料,減少資料複製和轉換的開銷。

使用場景包括:

  • 大規模資料處理:在處理大量資料時,Arrow Array 提供了更高的效能和效率。
  • 資料分析和機器學習:需要高效的資料處理和記憶體管理的場景。
  • 跨平臺資料處理:需要在不同計算引擎之間共享資料的應用。
import pandas as pd
import pyarrow as pa

# 使用 Arrow Array 建立 DataFrame
data = pa.table({'column1': [1, 2, 3], 'column2': ['a', 'b', 'c']})
df = pd.DataFrame(data)
print(df)

2.2 改進的空值處理

統一的空值表示 pd.NA

Pandas 2.0 引入了 pd.NA 來統一表示空值,解決了過去不同資料型別空值表示不一致的問題。pd.NA 是一個新的識別符號,用於表示缺失值,無論資料型別如何。

空值處理的最佳實踐

使用 pd.NA 進行空值處理的一些最佳實踐包括:

  • 統一表示空值:使用 pd.NA 統一表示所有資料型別的空值,簡化空值處理邏輯。
  • 檢查空值:使用 isna() 和 notna() 函式檢查空值。
  • 處理空值:使用 fillna() 函式填充空值,或使用 dropna() 函式刪除包含空值的行或列。
df = pd.DataFrame({'column1': [1, pd.NA, 3], 'column2': ['a', 'b', pd.NA]})
print(df)

2.3 效能提升

groupby 和 merge 操作的最佳化

Pandas 2.0 對 groupby 和 merge 操作進行了顯著的效能最佳化,提升了大資料量處理的效率。

# 示例:更快的 groupby 操作
df = pd.DataFrame({
    'group': ['A', 'B', 'A', 'B'],
    'value': [10, 20, 30, 40]
})
grouped = df.groupby('group').sum()
print(grouped)

實際應用中的效能對比

透過實際應用中的效能對比測試,可以看到 Pandas 2.0 在處理大資料集時的顯著效能提升。例如,在合併兩個大資料集時,Pandas 2.0 的速度明顯快於之前的版本。

2.4 改進的型別提示

型別提示的重要性

型別提示是提高程式碼可讀性和開發效率的重要工具。它可以幫助開發者進行型別檢查、自動補全和錯誤檢測,減少程式碼中的潛在錯誤。

Pandas 2.0 對型別提示的支援

Pandas 2.0 提供了更好的型別提示支援,幫助開發者在編寫程式碼時進行型別檢查和自動補全。

from typing import Optional
import pandas as pd

def process_data(df: pd.DataFrame) -> pd.DataFrame:
    # 進行資料處理
    return df

2.5 可擴充套件的介面

自定義聚合函式

Pandas 2.0 增加了許多可擴充套件的介面,使得開發者可以更容易地擴充套件 Pandas 的功能。例如,可以自定義聚合函式來進行資料聚合。

# 示例:自定義聚合函式
def custom_aggregation(series):
    return series.sum()

df = pd.DataFrame({
    'group': ['A', 'B', 'A', 'B'],
    'value': [10, 20, 30, 40]
})
grouped = df.groupby('group').agg(custom_aggregation)
print(grouped)

擴充套件方法的實現和應用

Pandas 2.0 允許開發者透過註冊擴充套件方法來擴充套件 DataFrame 和 Series 的功能。

# 示例:自定義擴充套件方法
@pd.api.extensions.register_dataframe_accessor("custom")
class CustomAccessor:
    def __init__(self, pandas_obj):
        self._obj = pandas_obj

    def custom_method(self):
        return self._obj.mean()

df = pd.DataFrame({'column1': [1, 2, 3], 'column2': [4, 5, 6]})
print(df.custom.custom_method())

[ 抱個拳,總個結 ]

Pandas 2.0 的這些新特性和改進,顯著提升了資料處理的效能和靈活性,使得 Pandas 在處理大規模資料和複雜資料分析任務時更加高效和便捷。

- 科研為國分憂,創新與民造福 -

日更時間緊任務急,難免有疏漏之處,還請大俠海涵內容僅供學習交流之用,部分素材來自網路,侵聯刪

[ 演算法金,碎碎念 ]

全網同名,日更萬日,讓更多人享受智慧樂趣

如果覺得內容有價值,煩請大俠多多 分享、在看、點贊,助力演算法金又猛又持久、很黃很 BL 的日更下去;

同時邀請大俠 關注、星標 演算法金,圍觀日更萬日,助你功力大增、笑傲江湖

相關文章