PythonでDataFrameからランダムな行を1つ選択する方法
はじめに
pandasのDataFrameからランダムに行を1つ選択したい場面は、データ分析やサンプリング処理でよくあります。この記事では、Pythonのrandomモジュールとilocを組み合わせて、DataFrameから任意の1行をランダムに抽出するコードを紹介します。
入力データと出力イメージ
例として、次のようなサンプルDataFrameを想定します。
Id Name
0 1 Adam
1 2 Michael
2 3 David
3 4 Jack
4 5 Peter
実行すると、以下のようにランダムに選ばれた1行が出力されます(実行するたびに結果は変わります)。
Random row is
Id 5
Name Peter
解決のアプローチ
以下の手順で実装していきます。
- DataFrameを定義する
- 行数を取得する:
df.shape[0]で行数を計算し、変数rowsに代入します。 - ランダムなインデックスを生成する:
randrangeメソッドを使って、random_rowの値を設定します。
random_row = r.randrange(rows)
次に、生成したrandom_rowをilocのスライシングに渡すことで、DataFrame内の任意のランダムな行を取り出すことができます。
df.iloc[random_row,:]
実装例
実際のコードは以下の通りです。
import pandas as pd
import random as r
data = { 'Id': [1,2,3,4,5],'Name': ['Adam','Michael','David','Jack','Peter']}
df = pd.DataFrame(data)
print("DataFrame is\n", df)
rows = df.shape[0]
print("total number of rows:-", rows)
random_row = r.randrange(rows)
print("print any random row is\n")
print(df.iloc[random_row,:])
出力結果
DataFrame is
Id Name
0 1 Adam
1 2 Michael
2 3 David
3 4 Jack
4 5 Peter
total number of rows:- 5
print any random row is
Id 3
Name David
補足:より簡単な方法
pandasには標準でdf.sample(n=1)という便利なメソッドも用意されています。単純に1行だけランダムに抽出したい場合は、こちらの方がコードを簡潔に書けます。一方、randrangeとilocを組み合わせる方法は、乱数のシード管理や独自の抽選ロジックを組み込みたい場合に柔軟性が高く、挙動を細かく制御できるのがメリットです。
-
Python・PandasのDataFrameから複数の列を選択する方法
Pandasでは、CSVファイルから読み込んだDataFrameに対して、二重の角括弧 [[ ]] を使うことで、複数の列を簡単に選択できます。本記事では、具体的な手順とサンプルコードを交えて解説します。 前提:サンプルデータについて ここでは、Microsoft Excelで開いた以下のような内容のCSVファイル(SalesData.csv)を例にします。このデータには「Car(車名)」「Reg_Price(登録価格)」「Units(台数)」の3つの列が含まれています。 ステップ1:CSVファイルをPandas DataFrameに読み込む まず、read_csv() メソッドを使って、C
-
Python Pandas入門 – データフレームから条件に合う行のサブセットを抽出する方法
Pandasのデータフレームから行のサブセット(一部の行)を取得するには、条件式を使ってデータを絞り込みます。この手法は「ブールインデックス参照」と呼ばれ、データ分析で最もよく使われる操作のひとつです。 使用するCSVファイル ここでは、Microsoft Excelで開いた次のようなCSVファイル(SalesData.csv)を例にします。車種名(Car)、登録価格(Reg_Price)、販売台数(Units)の3つの列を持つデータです。 CSVファイルをデータフレームとして読み込む まず、read_csv()メソッドを使って、CSVファイルのデータをPandasのデータフレームに読み込み