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

【Python】PandasのSeriesから特定の範囲の要素を抽出して表示する方法

はじめに

データ分析では、PandasのSeriesから特定の範囲に含まれる値だけを取り出したい場面がよくあります。本記事では、「10以上15以下」の要素を抽出して表示するプログラムを、2つの異なるアプローチで実装する方法を解説します。

入力 − 次のようなSeriesがあるとします。

0    12
1    13
2    15
3    20
4    19
5    18
6    11

出力 − 10から15の範囲にある要素を抽出すると、結果は次のようになります。

0    12
1    13
2    15
6    11

解決策1:between()メソッドを使う

Pandasには、指定した範囲内の値を簡単にフィルタリングできるbetween()メソッドが用意されています。このメソッドを使えば、わずか数行のコードで目的の処理を実現できます。

実装例

以下のコードでは、リストからSeriesを作成し、between(10, 15)で範囲内の要素を一括取得しています。

import pandas as pd

l = [12,13,15,20,19,18,11]
data = pd.Series(l)
print(data[data.between(10,15)])

出力

0    12
1    13
2    15
6    11

解決策2:forループとisin()メソッドを使う

より基本的なアプローチとして、forループと条件分岐を組み合わせる方法もあります。手順は以下の通りです。

  • Seriesを定義します。

  • 条件に一致する値を格納するための空のリストを作成します。

  • forループで全要素に順番にアクセスし、if文で「値が10以上かつ15以下」という条件を判定します。一致した値は順次リストに追加していきます。

  • 最後に、isin()メソッドを使って、リスト内の値と一致する要素だけをSeriesから取り出します。

実装例

import pandas as pd

l = [12,13,15,20,19,18,11]
data = pd.Series(l)

ls = []
for i in range(len(data)):
    if(data[i] >= 10 and data[i] <= 15):
        ls.append(data[i])

print(data[data.isin(ls)])

出力

0    12
1    13
2    15
6    11

まとめ

どちらの方法でも同じ結果が得られますが、between()を使う方法はコードが簡潔で可読性が高いため、実務ではこちらが推奨されます。一方、forループを使う方法は、複雑な条件や複数の条件を組み合わせたい場合に柔軟に対応できるのがメリットです。用途に応じて使い分けるとよいでしょう。

  1. PythonでpandasのSeriesから整数要素のみを抽出・フィルタリングする方法

    文字列と整数が混在するpandasのSeriesから、整数要素のみを抽出する方法を、2つの異なるアプローチで解説します。 入力データと期待される出力 入力 ― 次のようなSeriesを想定します。 0 1 1 2 2 python 3 pandas 4 3 5 4 6 5 出力 ― 整数要素のみを抽出した結果は以下の通りです。 0 1 1 2 4 3 5 4 6 5 解法1:type()でデータ型を判定する pandasのSeriesを定義します。 forループとitems()メソッドでインデックスと値を順番に取り

  2. Pythonでひし形を描画・出力するプログラムの書き方

    Pythonのループ処理(繰り返し構文)を活用すると、キーボードのさまざまな文字を使って、整形された図形を簡単に作成できます。その一例が「ひし形(ダイヤモンド形)」です。ひし形の出力には複数のループが必要になります。なぜなら、文字を縦方向と横方向の両方に出力しなければならないからです。さらに、図形は上端から中央に向かって徐々に大きくなり、中央から下端に向かって徐々に小さくなるという特徴もあります。このため、内側にもう1つのforループを含む、2つのforループを使用します。前半のループで上側(頂点から中央まで)を描き、後半のループで下側(中央から底辺まで)を描く仕組みです。サンプルコードdef