Pandas 基本:DataFrame のメモリと操作

PythonPythonBeginner
オンラインで実践に進む

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Pandas の基本実験にようこそ!この実験では、Pandas ライブラリのいくつかの基本的な側面を探ります。DataFrame のメモリ使用量、if/真偽値ステートメントの処理、ユーザー定義関数 (UDF) メソッドの使用、NA 値の処理、NumPy との違い、およびスレッドセーフに関する考慮事項です。

VM のヒント

VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替えて、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に直面した場合は、Labby にお尋ねください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

DataFrame のメモリ使用量を理解する

Pandas は、DataFrame のメモリ使用量を理解するためのいくつかのメソッドを提供しています。.info() メソッドを使うと、メモリ使用量を含む要約を表示できます。

import pandas as pd
import numpy as np

## Create a DataFrame
dtypes = ["int64", "float64", "datetime64[ns]", "timedelta64[ns]", "complex128", "object", "bool"]
n = 5000
data = {t: np.random.randint(100, size=n).astype(t) for t in dtypes}
df = pd.DataFrame(data)
df["categorical"] = df["object"].astype("category")

## Display DataFrame info
df.info()

Pandas での if/真偽値ステートメントの使用

Pandas は、曖昧さのため、if/真偽値ステートメントを直接使用することをサポートしていません。代わりに、.any().all()、または .empty() のようなメソッドを使用します。

## Check if any value in the Series is True
if pd.Series([False, True, False]).any():
    print("At least one True value in the Series")

ユーザー定義関数 (UDF) メソッドによる変更

UDF を受け取る pandas メソッドを使用する場合、UDF 内で DataFrame を変更しないようにしましょう。代わりに、変更を加える前にコピーを作成します。

def f(s):
    s = s.copy()
    s.pop("a")
    return s

df = pd.DataFrame({"a": [1, 2, 3], 'b': [4, 5, 6]})
df.apply(f, axis="columns")

NA 値の処理

Pandas は、欠損値がある可能性のある整数を表すための nullable 整数拡張型を提供しています。

s_int = pd.Series([1, 2, 3, 4, 5], index=list("abcde"), dtype=pd.Int64Dtype())
s2_int = s_int.reindex(["a", "b", "c", "f", "u"])

NumPy との違いを理解する

Pandas と NumPy は、分散を計算する方法に若干の違いがあります。この 2 つのライブラリ間で切り替える際に考慮することが重要です。

## Variance in pandas
var_pandas = df.var()

## Variance in NumPy
var_numpy = np.var(df.values)

Pandas におけるスレッドセーフを考慮する

Pandas は 100% スレッドセーフではありません。複数のスレッド間で Pandas オブジェクトを共有する際には注意が必要です。

バイトオーダーの問題の対処

異なるバイトオーダーのマシンで作成されたデータを扱う際、バイトオーダーの問題に遭遇することがあります。Pandas に渡す前に、データをネイティブシステムのバイトオーダーに変換してください。

x = np.array(list(range(10)), ">i4")  ## big endian
newx = x.byteswap().newbyteorder()  ## force native byteorder
s = pd.Series(newx)

まとめ

この実験では、Pandas ライブラリのいくつかの重要な側面を探りました。これらの側面を理解することで、Pandas をより効果的に活用し、一般的な落とし穴を避けることができます。