[100日でPythonをマスター] Day59: Pythonデータ分析_Pandasの高度な関数 - マルチレベルのインデックス作成、スライスと再形成操作へのアクセス、Pandasのカスタム関数とマッピング関数

目次

1 マルチレベルインデックス (MultiIndex)

1.1 マルチレベルインデックスの作成

1.1.1 タプルからのマルチレベルインデックスの作成

1.1.2 set_index() メソッドを使用してマルチレベルのインデックスを作成する

1.2 マルチレベルインデックスデータへのアクセス

1.3 マルチレベルインデックスの階層的スライス

1.4 マルチレベルインデックスの再形成

2 カスタム関数とマッピング

2.1 apply() メソッドを使用してカスタム関数操作を実行する

2.2 マッピング操作にmap()メソッドを使用する

2.3 applymap() を使用して要素レベルのカスタム関数操作を実行する

3 Pandas のパフォーマンスを最適化するための一般的なヒントと操作


1 マルチレベルインデックス (MultiIndex)

        Pandas のマルチレベル インデックス (MultiIndex) を使用すると、DataFrame の行または列に複数の階層インデックスを設定できるため、多次元時系列データや階層構造を持つデータなど、より複雑なデータ構造を処理できるようになります。マルチレベルのインデックス作成の詳細な手順と例を次に示します。

1.1 マルチレベルインデックスの作成

        マルチレベルのインデックスは、タプル、リスト、配列から、またはセッター メソッドを使用するなど、さまざまな方法で作成できますset_index()ここではいくつかの例を示します。

1.1.1 タプルからのマルチレベルインデックスの作成

import pandas as pd

# 从元组创建多层索引
index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)], names=['Label1', 'Label2'])

# 创建带多层索引的DataFrame
data = {'Values': [10, 20, 30, 40]}
df = pd.DataFrame(data, index=index)
print(df)

1.1.2set_index()メソッドを使用してマルチレベルインデックスを作成する

import pandas as pd

# 创建一个普通的DataFrame
data = {'Label1': ['A', 'A', 'B', 'B'],
        'Label2': [1, 2, 1, 2],
        'Values': [10, 20, 30, 40]}
df = pd.DataFrame(data)

# 使用set_index()方法将列转换为多层索引
df.set_index(['Label1', 'Label2'], inplace=True)
print(df)

1.2 マルチレベルインデックスデータへのアクセス

このメソッドを使用して、.loc[]マルチレベル索引内のデータにアクセスできます。複数のインデックス レベルでラベルを提供することで、必要なデータを正確に選択できます。ここではいくつかの例を示します。

# 访问指定多层索引的数据
print(df.loc['A'])  # 访问Label1为'A'的所有数据
print(df.loc['A', 1])  # 访问Label1为'A'且Label2为1的数据

1.3 マルチレベルインデックスの階層的スライス

スライス操作を使用して、マルチレベル インデックス内のデータのサブセットを選択できます。次のように:

# 切片操作:选择Label1为'A'到'B'的数据
print(df.loc['A':'B'])

# 切片操作:选择Label1为'A'且Label2为1到2的数据
print(df.loc['A', 1:2])

1.4 マルチレベルインデックスの再形成

.stack()および.unstack()メソッドを使用して、複数レベルのインデックスでデータを再形成できます。.stack()列ラベルはインデックス レベルに変換でき、.unstack()インデックス レベルは列ラベルに変換できます。次のように:

# 使用stack()方法将列标签转换为索引级别
stacked_df = df.stack()

# 使用unstack()方法将索引级别转换为列标签
unstacked_df = stacked_df.unstack()

これらは、Pandas のマルチレベル インデックス作成に関する基本的な手順と例です。マルチレベル インデックスは、複雑なデータを処理するための重要なツールであり、データをより柔軟に整理してアクセスできるようになります。データの特性とニーズに基づいて、マルチレベル インデックスの使用方法を選択できます。

2 カスタム関数とマッピング

        Pandas では、カスタム関数とマッピングを使用してデータを変換および処理できます。これらの方法は、ニーズに応じてデータ操作をカスタマイズできるため、非常に便利です。ここでは、Pandas でカスタム関数とマッピングを使用する方法の詳細な手順と例を示します。

2.1apply()メソッドを使用してカスタム関数操作を実行する

  apply()メソッドを使用して、DataFrame の行または列にカスタム関数を適用できます。関数を列に適用することも、データフレーム全体に適用することもできます。以下に例を示します。

import pandas as pd

# 创建一个示例DataFrame
data = {'A': [1, 2, 3, 4],
        'B': [10, 20, 30, 40]}
df = pd.DataFrame(data)

# 自定义函数,将A列的值加倍
def double(x):
    return x * 2

# 使用apply()将自定义函数应用到A列
df['A_doubled'] = df['A'].apply(double)

print(df)

出力: 

 

2.2map()メソッドを使用してマッピング操作を実行する

  map()このメソッドは、あるシリーズの値を別のシリーズの値にマップするために使用でき、通常は特定の列の値を置換またはマップするために使用されます。以下に例を示します。

import pandas as pd

# 创建一个示例DataFrame
data = {'A': ['foo', 'bar', 'baz'],
        'B': [1, 2, 3]}
df = pd.DataFrame(data)

# 创建一个字典来映射A列的值
mapping = {'foo': 'apple', 'bar': 'banana', 'baz': 'cherry'}

# 使用map()将A列的值映射为新的值
df['A_mapped'] = df['A'].map(mapping)

print(df)

出力: 

2.3applymap()要素レベルのカスタム関数操作を実行するために使用します

    applymap()メソッドは、DataFrame の各要素にカスタム関数を適用するために使用されます。これは、データフレーム全体に適用される要素レベルの操作です。以下に例を示します。

import pandas as pd

# 创建一个示例DataFrame
data = {'A': [1, 2, 3],
        'B': [4, 5, 6]}
df = pd.DataFrame(data)

# 自定义函数,将每个元素乘以2
def double(x):
    return x * 2

# 使用applymap()将自定义函数应用到整个DataFrame
df_doubled = df.applymap(double)

print(df_doubled)

出力: 

        これらは、Pandas でのカスタム関数とマッピングの使用の基本的な例です。これらの方法を使用すると、ニーズに合わせてデータ操作をカスタマイズできます。データ クリーニング、数値計算、値のマッピングのいずれを行う場合でも、カスタム関数とマッピングは非常に便利なツールです。

3 Pandas のパフォーマンスを最適化するための一般的なヒントと操作

         Pandas のパフォーマンスの最適化は、特に大規模なデータ セットを扱う場合に重要なトピックです。ここでは、Pandas のパフォーマンスを向上させるための一般的な提案とヒントをいくつか示します。

  1. 適切なデータ構造を選択する: Pandas には、DataFrame と Series という 2 つの主要なデータ構造があります。データに最適な構造を必ず選択してください。たとえば、1 次元データのみを処理する必要がある場合は、DataFrame よりも Series を使用した方が効率的です。

  2. ループの使用を避ける:データ処理に明示的なループを使用することは避けてください。多くの場合、ループは Pandas の組み込みのベクトル化操作よりも遅いためです。ループ操作を置き換えるにはapply()Pandas の組み込み関数とメソッド ( 、 、 など) を使用しますmap()groupby()

  3. atおよび を使用して要素にアクセスするiat:行または列全体ではなく単一の要素にのみアクセスする必要がある場合は、.at[]およびメソッドを使用します。これらのメソッドはおよび.iat[]より高速です.loc[].iloc[]

  4. と を使用したスライス: と を.loc[]使用すると.iloc[].loc[]、データのコピーを回避して、より高速なスライスとインデックス作成が可能になります.iloc[]andを使用したインデックス作成.loc[].iloc[].loc[]: andインデクサーを使用して.iloc[]データにアクセスします。[]特に複数の行または列を選択する必要がある場合は、角括弧を直接使用するよりも効率的です。

  5. メモリ オプションを適切に設定する: Pandas のメモリ オプション ( や など) を設定することでpd.set_option('max_rows', None)pd.set_option('max_columns', None)表示される行と列の最大数を制御できます。これは、大規模なデータセットに大量のデータが表示されるのを防ぐのに役立ちます。

  6. マージおよび結合の最適化:pd.merge()およびなどの適切なマージおよび結合メソッドを使用しpd.concat()、 や などのパラメータを使用してon操作howsuffixes最適化します。

  7. 適切なデータ型を使用する:astype() Pandas に自動的にデータ型を推測させるのではなく、明示的にデータ型を指定するメソッドを使用するようにしてください。これにより、メモリ使用量が削減され、パフォーマンスが向上します。Pandas は各列のデータ型を自動的に選択しますが、データ型を明示的に指定してメモリ使用量を削減し、パフォーマンスを向上させることができます。pd.to_numeric()などのメソッドを使用して、pd.to_datetime()列を正しいデータ型に変換します。

  8. HDF5 ストレージを使用する:大規模なデータ セットの場合は、データの読み取りと書き込みを高速に行うために、データを HDF5 形式で保存することを検討してください。

  9. パラメーターを適切に使用するinplace: Pandas では、多くのメソッドはデフォルトで元のデータを変更せず、新しいオブジェクトを返します。新しいオブジェクトを作成せずに生データを操作したい場合は、inplace=Trueパラメータを使用してメモリを節約し、パフォーマンスを向上させることができます。

  10. 並列処理:大規模なデータ セットの場合は、並列コンピューティングを使用してデータ処理を高速化することを検討してください。Pandas はmultiprocessing並列処理を実装するためのライブラリを提供します。

おすすめ

転載: blog.csdn.net/qq_35831906/article/details/132755913