Pandas でネストされたデータフレームを作成する

Salman Mehmood 2023年6月21日
  1. パンダのネストされたデータフレーム
  2. Pandas でネストされたデータフレームを作成する
Pandas でネストされたデータフレームを作成する

この記事では、Pandas のネストされたデータフレームを読み取る方法について説明します。 これは、Python で Pandas のネストされたデータフレームを読み取るときの問題を修正する方法も示します。

パンダのネストされたデータフレーム

Pandas DataFrame は、2つの次元とそれらの次元に対応するラベルを持つデータを格納する構造です。 DataFrame は、データ サイエンス、機械学習、科学計算など、多くのデータ集約型の分野で広く適用されています。

DataFrame は、Excel や Calc などのアプリケーションで操作できる SQL テーブルやスプレッドシートに匹敵します。

これらは Python および NumPy エコシステムの不可欠なコンポーネントであるため、DataFrame は多くの場合、速度、使いやすさ、パワーの点でテーブルやスプレッドシートよりも優れています。 これは、多くのアプリケーションに当てはまります。

大量のデータを処理しているときに、より多くのインスタンスを内部に含む Dataframe インスタンスを作成する必要がある状況が発生する可能性があります。

次のコードを検討してください。

import pandas as pd

data = [
    {"a": 1, "b": 2, "c": 3},
    {"a": 10, "b": 20, "c": 30},
    {"a": 40, "b": 50, "c": 60},
    {"a": 70, "b": 80, "c": 90},
]

data2 = [
    {"d": 1, "e": 2, "f": 3},
    {"d": 10, "e": 20, "f": 30},
    {"d": 40, "e": 50, "f": 60},
    {"d": 70, "e": 80, "f": 90},
]

data3 = [
    {"g": 1, "h": 2, "i": 3},
    {"g": 10, "h": 20, "i": 30},
    {"g": 40, "h": 50, "i": 60},
    {"g": 70, "h": 80, "i": 90},
]


df = pd.DataFrame(data)
df2 = pd.DataFrame(data2)
df3 = pd.DataFrame(data3)

print(
    "Dataframe 1: \n"
    + str(df)
    + "\n\nDataframe 2:\n"
    + str(df2)
    + "\n\nDataframe 3:\n"
    + str(df3)
)

出力:

Dataframe 1: 
    a   b   c
0   1   2   3
1  10  20  30
2  40  50  60
3  70  80  90

Dataframe 2:
    d   e   f
0   1   2   3
1  10  20  30
2  40  50  60
3  70  80  90

Dataframe 3:
    g   h   i
0   1   2   3
1  10  20  30
2  40  50  60
3  70  80  90

上記のコードでは、3つの異なる Dataframe インスタンスが宣言され、変数 dfdf2、および df3 にそれぞれ格納されています。 3つの異なる Dataframe インスタンスが密接に関連しているという仮定の下では、特にインスタンス内のデータが大きい場合、それらに個別にアクセスするのは面倒になる可能性があります。

この問題を克服するには、データを 1 か所に集めることが、アクセスを容易にする賢明な方法です。 ネストされた Dataframe は、関連するすべての Dataframe インスタンスを新しい単一の Dataframe インスタンスに集めることができるため、潜在的な解決策になる可能性があります。

一方、ネストされた Dataframe は最良の選択ではない可能性があり、非常に特殊なシナリオとユース ケースにのみ適しています。

Pandas でネストされたデータフレームを作成する

Dataframe に通常の値を割り当てる方法と同様に、Dataframe インスタンスを受け取り、いくつかのユーザー定義の Dataframe インスタンスで構成される新しい Dataframe を作成することもできます。つまり、ネストされた Dataframe と呼ばれます。

次のコードを検討してください。

import pandas as pd


data = [
    {"a": 1, "b": 2, "c": 3},
    {"a": 10, "b": 20, "c": 30},
    {"a": 40, "b": 50, "c": 60},
    {"a": 70, "b": 80, "c": 90},
]

data2 = [
    {"d": 1, "e": 2, "f": 3},
    {"d": 10, "e": 20, "f": 30},
    {"d": 40, "e": 50, "f": 60},
    {"d": 70, "e": 80, "f": 90},
]

data3 = [
    {"g": 1, "h": 2, "i": 3},
    {"g": 10, "h": 20, "i": 30},
    {"g": 40, "h": 50, "i": 60},
    {"g": 70, "h": 80, "i": 90},
]

df = pd.DataFrame(data)
df2 = pd.DataFrame(data2)
df3 = pd.DataFrame(data3)


df4 = pd.DataFrame({"idx": [1, 2, 3], "dfs": [df, df2, df3]})

print(df4)

これにより、次の出力が得られます。

   idx                                                dfs
0    1      a   b   c
0   1   2   3
1  10  20  30
2  4...
1    2      d   e   f
0   1   2   3
1  10  20  30
2  4...
2    3      g   h   i
0   1   2   3
1  10  20  30
2  4...

上記の出力から、Dataframe インスタンスを印刷するだけでは、Dataframe 全体がうまく表示されないことがわかります。 出力をもう少し理解しやすくするために、この場合は Dataframe インスタンスである Dataframe 要素に個別にアクセスする必要があります。

要素にアクセスするには、次の行を検討してください。

print(
    "Dataframe 1: \n"
    + str(df4["dfs"].iloc[0])
    + "\n\nDataframe 2:\n"
    + str(df4["dfs"].iloc[1])
    + "\n\nDataframe 3:\n"
    + str(df4["dfs"].iloc[2])
)

これにより、次の出力が得られます。

Dataframe 1: 
    a   b   c
0   1   2   3
1  10  20  30
2  40  50  60
3  70  80  90

Dataframe 2:
    d   e   f
0   1   2   3
1  10  20  30
2  40  50  60
3  70  80  90

Dataframe 3:
    g   h   i
0   1   2   3
1  10  20  30
2  40  50  60
3  70  80  90

Dataframe インスタンスを別のインスタンス内にネストするには、新しい Dataframe インスタンスを作成し、以前に作成した Dataframe インスタンスを新しく作成した Dataframe に割り当てる必要があります。

新しく作成された DataframeDataframe インスタンスを割り当てるのは非常に簡単で、通常のデータを Dataframe インスタンスに割り当てる際に従うメソッドと何ら変わりはありません。

私たちの場合、必要な Dataframe インスタンスで構成されるリストが作成され、それが Dataframe クラスのコンストラクターに渡され、新しい Dataframe インスタンスを作成するときに、特に Dataframe として機能するように作成されました。 いくつかの データフレーム

他の問題と同様に、この問題には多くのアプローチが考えられます。 ネストされた Dataframe は、特定のシナリオとユース ケースで使用されます。

一般に、状況でデータをどのように構造化する必要があるか、およびデータに対してどのような操作を実行する必要があるかを最初に調査することをお勧めします。 これらの条件に基づいて、ネストされた Dataframes を使用することが実行可能なオプションであるかどうかを判断できます。

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

関連記事 - Pandas Dataframe