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
インスタンスが宣言され、変数 df
、df2
、および 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
に割り当てる必要があります。
新しく作成された Dataframe
に Dataframe
インスタンスを割り当てるのは非常に簡単で、通常のデータを Dataframe
インスタンスに割り当てる際に従うメソッドと何ら変わりはありません。
私たちの場合、必要な Dataframe
インスタンスで構成されるリストが作成され、それが Dataframe
クラスのコンストラクターに渡され、新しい Dataframe
インスタンスを作成するときに、特に Dataframe
として機能するように作成されました。 いくつかの データフレーム
。
他の問題と同様に、この問題には多くのアプローチが考えられます。 ネストされた Dataframe
は、特定のシナリオとユース ケースで使用されます。
一般に、状況でデータをどのように構造化する必要があるか、およびデータに対してどのような操作を実行する必要があるかを最初に調査することをお勧めします。 これらの条件に基づいて、ネストされた Dataframes
を使用することが実行可能なオプションであるかどうかを判断できます。
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