Python
 Computer >> コンピューター >  >> プログラミング >> Python

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

解決のアプローチ

以下の手順で実装していきます。

  1. DataFrameを定義する
  2. 行数を取得する: df.shape[0]で行数を計算し、変数rowsに代入します。
  3. ランダムなインデックスを生成する: randrangeメソッドを使って、random_rowの値を設定します。
random_row = r.randrange(rows)

次に、生成したrandom_rowilocのスライシングに渡すことで、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行だけランダムに抽出したい場合は、こちらの方がコードを簡潔に書けます。一方、randrangeilocを組み合わせる方法は、乱数のシード管理や独自の抽選ロジックを組み込みたい場合に柔軟性が高く、挙動を細かく制御できるのがメリットです。

  1. Python・PandasのDataFrameから複数の列を選択する方法

    Pandasでは、CSVファイルから読み込んだDataFrameに対して、二重の角括弧 [[ ]] を使うことで、複数の列を簡単に選択できます。本記事では、具体的な手順とサンプルコードを交えて解説します。 前提:サンプルデータについて ここでは、Microsoft Excelで開いた以下のような内容のCSVファイル(SalesData.csv)を例にします。このデータには「Car(車名)」「Reg_Price(登録価格)」「Units(台数)」の3つの列が含まれています。 ステップ1:CSVファイルをPandas DataFrameに読み込む まず、read_csv() メソッドを使って、C

  2. Python Pandas入門 – データフレームから条件に合う行のサブセットを抽出する方法

    Pandasのデータフレームから行のサブセット(一部の行)を取得するには、条件式を使ってデータを絞り込みます。この手法は「ブールインデックス参照」と呼ばれ、データ分析で最もよく使われる操作のひとつです。 使用するCSVファイル ここでは、Microsoft Excelで開いた次のようなCSVファイル(SalesData.csv)を例にします。車種名(Car)、登録価格(Reg_Price)、販売台数(Units)の3つの列を持つデータです。 CSVファイルをデータフレームとして読み込む まず、read_csv()メソッドを使って、CSVファイルのデータをPandasのデータフレームに読み込み