2017-10-29 1 views
1

IDを特定のフォーマットに従うかどうかをチェックするコマンドを使用したいと思います。つまり、IDは9桁の長さでなければなりません。アルファベットになる。そうでなければ、そのID番号に対応する行を除外したいと思います。例えば、私はこのデータフレームを持っている(呼び出しそれはDF):df = df[df['ID'].str.len()==9]を使用してデータフレームのPythonで間違ったフォーマットのセルをフィルタリングする方法

  ID   status 
    0 B12345678 graduated 
    1 C12345678 graduated 
    2 A12345678 in progress 
    3 111111111 unknown 
    4 A3B111111 unknown 
    5 A12 unknown 

が、私は

  ID   status 
    0 B12345678 graduated 
    1 C12345678 graduated 
    2 A12345678 in progress 
    3 111111111 unknown 
    4 A3B111111 unknown 

しかし、行3と4を取得するために、最後の行をフィルタリングすることができ、まだ適切なフォーマットではありません私もそれをフィルタリングする必要があります。これを行う効率的な方法は何でしょうか?

私は

df = df[df['ID'].isdigit()] 

を試してみましたが、私は言うエラーました: "「シリーズのオブジェクトが属性 'isdigit' を持っていない"

マイデータフレームのコードは次のとおりです。

students = [('ID', ['B12345678', 'C12345678', 'A12345678','111111111','A3B111111','A12']), 
('status', ['graduated', 'graduated','in progress','unknown','unknown','unknown']) 
] 


df = pd.DataFrame.from_items(students) 

答えて

2

を対応する正規表現でSeries.str.match()を使用してください:

In [4]: df[df['ID'].str.match(r'[A-Z]\d{8}')] 
Out[4]: 
      ID  status 
0 B12345678 graduated 
1 C12345678 graduated 
2 A12345678 in progress 

または

df[df['ID'].str.match(r'[A-Z]\d{8}', case=False)] 

最初の文字が同様に小文字で

+0

感謝を発生する可能性がある場合。これらのデータがストリーミングされている場合は、どうすればよいですか?たとえば、1行だけ、または1つのID要素(B12345678など)を確認するにはどうすればよいですか?私は、 'str'オブジェクトには属性 'str'がないというエラーが表示され続けます – Mark

関連する問題