

複数のコラムをもつファイルを読み込んで、1つのコラムに特定の文字列が含まれている場合にその行を行ごと取り出す方法についてです。具体的には以下のような入力ファイルで、Mrを含む行のみを抽出する方法を知りたいです。

[code]

      name    age
    1 Mr.A    30
    2 Miss.B  20
    3 Mr.C    25
    
[/code]

よろしくお願いします。


CC BY-SA 4.0
2018-06-12T12:09:35.663
44723
2018-06-13T01:03:50.063
2018-06-12T12:55:12.480
3060
28915
question
python python3
特定の文字列が含まれている行だけを抽出する方法を伺いたいです


for 文とともに `open()` 関数でファイルを読み込むことで，行ごとのイテレーション処理が行なえます．Python では「文字列 A が文字列 B
に含まれるか否か」は `A in B` で判定できるので，例えば以下のようにすれば `Mr.` という文字列を含む行だけが出力されます．

[code]

    for l in open('input.txt'):
        if "Mr." in l:
            print(l, end='')
    
[/code]


CC BY-SA 4.0
2018-06-12T12:30:59.983
44724
2018-06-12T12:30:59.983
27047
44723
answer


Kaggleの乗客名簿のデータだとすると、'Mr'を含む行を抽出するのではなくて、列`name`に敬称の'Mr.'が含まれるものを抽出するという問題ではないでしょうか。'Mr.'の前は通常空白になるので、以下のようにして調べてみて、もし両方あれば`concat`するのが一番いいのではないでしょうか。

[code]

    df[df['name'].str.startswith('Mr.')]
    df[df['name'].str.contains(' Mr.')]
    
[/code]

このケースでは、以下でも問題はありませんが、英単語の場合はスペースで区切られているので間違って拾うのを避けるためにスペースを最初に入れて検束するのが有効な場合が多いと思います。

[code]

    df[df['name'].str.contains('Mr.')]
    
[/code]

また、敬称を予測モデルに使いたいのであれば、`split`を使って分解してみたらどうでしょうか。（一般的には、`Mr.`の場合、前後にスペースがくるので正規表現を使わなくても単に`split()`でもスペースで分解してくれるので問題ないかも）

[code]

    df['name'].str.split(r'[\s\.]', expand=True)
    
[/code]


CC BY-SA 4.0
2018-06-12T16:23:57.280
44728
2018-06-13T01:03:50.063
2018-06-13T01:03:50.063
15171
15171
44723
answer