Pandas の DataFrame を分割する
このチュートリアルでは、行インデックス、DataFrame.groupby()
メソッド、DataFrame.sample()
メソッドを用いて、DataFrame を複数の小さな DataFrame に分割する方法を説明します。
以下の apprix_df
DataFrame を用いて、DataFrame を複数の小さな DataFrame に分割する方法を説明します。
import pandas as pd
apprix_df = pd.DataFrame(
{
"Name": ["Anish", "Rabindra", "Manish", "Samir", "Binam"],
"Post": ["CEO", "CTO", "System Admin", "Consultant", "Engineer"],
"Qualification": ["MBA", "MS", "MCA", "PhD", "BE"],
}
)
print("Apprix Team DataFrame:")
print(apprix_df, "\n")
出力:
Apprix Team DataFrame:
Name Post Qualification
0 Anish CEO MBA
1 Rabindra CTO MS
2 Manish System Admin MCA
3 Samir Consultant PhD
4 Binam Engineer BE
行インデックスを使った DataFrame の分割
import pandas as pd
apprix_df = pd.DataFrame(
{
"Name": ["Anish", "Rabindra", "Manish", "Samir", "Binam"],
"Post": ["CEO", "CTO", "System Admin", "Consultant", "Engineer"],
"Qualification": ["MBA", "MS", "MCA", "PhD", "BE"],
}
)
print("Apprix Team DataFrame:")
print(apprix_df, "\n")
apprix_1 = apprix_df.iloc[:2, :]
apprix_2 = apprix_df.iloc[2:, :]
print("The DataFrames formed by splitting of Apprix Team DataFrame are: ", "\n")
print(apprix_1, "\n")
print(apprix_2, "\n")
出力:
Apprix Team DataFrame:
Name Post Qualification
0 Anish CEO MBA
1 Rabindra CTO MS
2 Manish System Admin MCA
3 Samir Consultant PhD
4 Binam Engineer BE
The DataFrames formed by splitting the Apprix Team DataFrame are:
Name Post Qualification
0 Anish CEO MBA
1 Rabindra CTO MS
Name Post Qualification
2 Manish System Admin MCA
3 Samir Consultant PhD
4 Binam Engineer BE
DataFrame apprix_df
を行インデックスを用いて 2つの部分に分割します。最初の部分には apprix_df
DataFrame の最初の 2 行が含まれ、2 番目の部分には最後の 3 行が含まれます。
各分割に含める行を iloc
プロパティで指定することができます。[:2,:]
は、インデックス 2
が排他的に指定された行までの行を選択します (インデックス 2
が指定された行は含まれません)。したがって、apprix_df.iloc[:2,:]
は、DataFrame apprix_df
の最初の 2 行をインデックス 0
と 1
で選択します。
groupby()
メソッドを用いた DataFrame の分割
import pandas as pd
apprix_df = pd.DataFrame(
{
"Name": ["Anish", "Rabindra", "Manish", "Samir", "Binam"],
"Post": ["CEO", "CTO", "System Admin", "Consultant", "Engineer"],
"Qualification": ["MBA", "MS", "MS", "PhD", "MS"],
}
)
print("Apprix Team DataFrame:")
print(apprix_df, "\n")
groups = apprix_df.groupby(apprix_df.Qualification)
ms_df = groups.get_group("MS")
mba_df = groups.get_group("MBA")
phd_df = groups.get_group("PhD")
print("Group with Qualification MS:")
print(ms_df, "\n")
print("Group with Qualification MBA:")
print(mba_df, "\n")
print("Group with Qualification PhD:")
print(phd_df, "\n")
出力:
Apprix Team DataFrame:
Name Post Qualification
0 Anish CEO MBA
1 Rabindra CTO MS
2 Manish System Admin MS
3 Samir Consultant PhD
4 Binam Engineer MS
Group with Qualification MS:
Name Post Qualification
1 Rabindra CTO MS
2 Manish System Admin MS
4 Binam Engineer MS
Group with Qualification MBA:
Name Post Qualification
0 Anish CEO MBA
Group with Qualification PhD:
Name Post Qualification
3 Samir Consultant PhD
DataFrame apprix_df
を Qualification
カラムの値に基づいて 3つの部分に分割します。Qualification
カラムの値が同じ行は同じグループに配置されます。
関数 groupby()
は Qualification
カラムの値に基づいてグループを形成します。そして、groupby()
メソッドでグループ化された行を get_group()
メソッドで抽出します。
sample()
メソッドを用いた DataFrame の分割
DataFrame から sample()
メソッドを用いてランダムに行をサンプリングすることで、DataFrame を形成することができます。親の DataFrame からサンプリングする行の比率を設定することができます。
import pandas as pd
apprix_df = pd.DataFrame(
{
"Name": ["Anish", "Rabindra", "Manish", "Samir", "Binam"],
"Post": ["CEO", "CTO", "System Admin", "Consultant", "Engineer"],
"Qualification": ["MBA", "MS", "MS", "PhD", "MS"],
}
)
print("Apprix Team DataFrame:")
print(apprix_df, "\n")
random_df = apprix_df.sample(frac=0.4, random_state=60)
print("Random split from the Apprix Team DataFrame:")
print(random_df)
出力:
Apprix Team DataFrame:
Name Post Qualification
0 Anish CEO MBA
1 Rabindra CTO MS
2 Manish System Admin MS
3 Samir Consultant PhD
4 Binam Engineer MS
Random split from the Apprix Team DataFrame:
Name Post Qualification
0 Anish CEO MBA
4 Binam Engineer MS
apprix_df
DataFrame から行の 40%をランダムにサンプリングし、サンプリングされた行から形成された DataFrame を表示します。random_state
は、サンプリング時に毎回同じランダムサンプルが得られるように設定されています。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn