Pandasで正規表現を使って行をフィルタリングする方法
正規表現(regex)とは、特定の検索パターンを定義するための文字列のことです。Pandasでは、str.match() メソッドを使うことで、正規表現に基づいてDataFrameの行を簡単にフィルタリングできます。
フィルタリングの手順
- 2次元のサイズ可変な表形式データである df(DataFrame)を作成します。
- 入力となるDataFrame df を表示して内容を確認します。
- 正規表現を格納する変数 regex を初期化します。たとえば文字列 'J.*' を指定すると、「J」で始まるすべてのエントリが抽出されます。
- df.column_name.str.match(regex) の形式で、指定した列に対して正規表現マッチングを行い、条件に合致する行だけを抽出します。
サンプルコード
import pandas as pd
df = pd.DataFrame(
dict(
name=['John', 'Jacob', 'Tom', 'Tim', 'Ally'],
marks=[89, 23, 100, 56, 90],
subjects=["Math", "Physics", "Chemistry", "Biology", "English"]
)
)
print("入力DataFrame:\n", df)
regex = 'J.*'
print(regex, "適用後のDataFrame:\n", df[df.name.str.match(regex)])
regex = 'A.*'
print(regex, "適用後のDataFrame:\n", df[df.name.str.match(regex)])実行結果
入力DataFrame:
name marks subjects
0 John 89 Math
1 Jacob 23 Physics
2 Tom 100 Chemistry
3 Tim 56 Biology
4 Ally 90 English
J.* 適用後のDataFrame:
name marks subjects
0 John 89 Math
1 Jacob 23 Physics
A.* 適用後のDataFrame:
name marks subjects
4 Ally 90 Englishポイント解説
str.match() は文字列の先頭からパターンとの一致を判定するメソッドです。そのため 'J.*' は「Jで始まる名前」にマッチし、John と Jacob の行だけが抽出されます。同様に 'A.*' を指定すると、Ally の行のみが取得できます。
なお、部分一致で検索したい場合は str.contains() メソッドを使うと、文字列の途中にパターンが含まれる行も抽出可能です。用途に応じて使い分けると便利です。
-
Pandasデータフレームを日付ごとに集計してプロットする方法
Pandasデータフレームを日付ごとに集計してグラフ化したい場合、groupby()とagg()を組み合わせることで簡単に実現できます。本記事では、Matplotlibを使って集計結果を棒グラフとして可視化するまでの具体的な手順を、サンプルコード付きで解説します。 手順 図のサイズを設定し、サブプロット間およびその周囲のパディング(余白)を調整します。 2次元で、サイズ変更可能、かつ異なるデータ型を含みうる表形式データを持つデータフレーム df を作成します。 groupby() と agg([sum]) を使って、日付ごとに値を集計したデータフレームを取得します。 kind=bar を指定
-
【Python】Pandas DataFrameからnull(欠損値)行を削除する方法|dropna()の使い方
PandasのDataFrameからnull(NaN)行を削除するには、dropna()メソッドを使用します。この記事では、NaNを含むCSVファイルを読み込み、dropna()で欠損値を含む行を取り除くまでの手順を、サンプルコードと実行結果とともにわかりやすく解説します。前提:NaNを含むCSVファイル今回の例では、一部にNaN(null値)が含まれる以下のようなCSVファイル(CarRecords.csv)を使用します。手順1:read_csv()でCSVファイルを読み込むまずpandasをインポートし、read_csv()を使ってCSVファイルを読み込みます。ここではデスクトップ上に保存