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

【Python】Pandasで特定のテキストを含む行を抽出する方法

PythonのPandasで、DataFrameから特定のテキストを含む行を抽出するには、str.contains()メソッドを使用します。本記事では、CSVファイルを読み込み、「BMW」という文字列を含む行だけを取り出す方法を、サンプルコードと実行結果とともにわかりやすく解説します。

使用するCSVファイル

今回の例では、以下のパスにあるCSVファイル(CarRecords.csv)を使用します。

C:\Users\amit_\Desktop\CarRecords.csv

手順1:CSVファイルを読み込んでDataFrameを作成する

まず、pd.read_csv()を使ってCSVファイルを読み込み、PandasのDataFrameを作成します。

dataFrame = pd.read_csv("C:\Users\amit_\Desktop\CarRecords.csv")

手順2:str.contains()で特定のテキストを含む行を抽出する

次に、「BMW」というテキストを含む行を選択します。str.contains()は、指定した文字列が各セルに含まれているかどうかを判定し、True/FalseのSeriesを返します。これを条件としてDataFrameに渡すことで、該当する行のみを抽出できます。

dataFrame = dataFrame[dataFrame['Car'].str.contains('BMW')]

完全なサンプルコード

以下が全体のコードです。

import pandas as pd

# CSVファイルを読み込む
dataFrame = pd.read_csv("C:\Users\amit_\Desktop\CarRecords.csv")
print("DataFrame...\n", dataFrame)

# 「BMW」というテキストを含む行を抽出
dataFrame = dataFrame[dataFrame['Car'].str.contains('BMW')]
print("\n「BMW」を含む行の取得結果...\n", dataFrame)

実行結果

上記のコードを実行すると、次のような出力が得られます。

DataFrame ...
           Car       Place   UnitsSold
0         Audi   Bangalore          80
1      Porsche      Mumbai         110
2  RollsRoyce        Pune         100
3         BMW       Delhi          95
4    Mercedes   Hyderabad          80
5 Lamborghini  Chandigarh          80
6         Audi      Mumbai         100
7    Mercedes        Pune         120
8 Lamborghini       Delhi         100

「BMW」を含む行の取得結果...
     Car   Place UnitsSold
3   BMW   Delhi        95

補足:覚えておくと便利なオプション

大文字・小文字を区別しない検索

case=Falseを指定すると、大文字・小文字を区別せずに検索できます。「BMW」「bmw」「Bmw」などもまとめて抽出したい場合に有効です。

dataFrame = dataFrame[dataFrame['Car'].str.contains('bmw', case=False)]

欠損値(NaN)を含む列の安全な処理

対象の列に欠損値(NaN)が含まれている場合、そのままではエラーが発生することがあります。na=Falseを指定すると、NaNをFalseとして扱い、エラーを回避できます。

dataFrame = dataFrame[dataFrame['Car'].str.contains('BMW', na=False)]

まとめ

Pandasで特定のテキストを含む行を抽出するには、df['列名'].str.contains('検索文字列')を条件として使うのが基本です。大文字・小文字を無視したい場合はcase=False、欠損値が含まれる可能性がある場合はna=Falseを組み合わせると、より堅牢なコードになります。部分一致ではなく前方一致や正規表現での抽出が必要な場合は、str.startswith()regex=Trueオプションの活用も検討してみてください。

  1. Python Pandasのeval()関数で行の合計を評価・計算する方法

    eval()関数で行の合計を求める Pandasのeval()関数は、文字列で記述した数式をDataFrameに対して直接評価できる便利な機能です。これを利用すると、指定した複数の列の値を足し合わせた行ごとの合計を、新しい列として簡単に追加できます。 まずは、商品の在庫データを含むDataFrameを作成しましょう。 dataFrame = pd.DataFrame({Product: [SmartTV, ChromeCast, Speaker, Earphone], Opening_Stock: [300, 700, 1200, 1500]

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

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