2017-07-18 4 views
0

私は少し助けが必要です。Python3:正規表現を使ってリスト内の各項目を検証する方法

私はPython(AnaCondaにバンドルされているバージョン3.0を使用しています)を新しく使いました。正規表現を使用して、条件を満たす有効な数字のリストを返すようにしたいと考えています(\ d {11} )。私は

for row in df.iterrows(): # dataframe.iterrows() returns tuple 
    print(row[1][0]) 

を使用して、すべてのアイテムを返すとき、それは正規表現の検証せずに、すべてのアイテムを返しますが、私はこの

for row in df.iterrows(): # dataframe.iterrows() returns tuple 
    print(re.compile(r"\d{11}").search(row[1][0]).group()) 
で検証しようとすると、パンダ

df = pd.DataFrame(columns=['phoneNumber','count'], data=[ 
    ['08034303939',11], 
    ['08034382919',11], 
    ['0802329292',10], 
    ['09039292921',11]]) 

を使用してリストを取得しています

アトリビュートエラーを返します(一致しない値の戻り値はNoneであるため)

どうすればこの問題を回避できますか、それとも簡単な方法がありますか?

あなたが検証したい場合は、 df.str.matchを使用して df.astype(bool)を使用してブール値マスクに変換することができます

答えて

1

In [1062]: x = df['phoneNumber'].str.match(r'\d{11}').astype(bool); x 
Out[1062]: 
0  True 
1  True 
2 False 
3  True 
Name: phoneNumber, dtype: bool 

あなたは有効な電話番号を持つ行のみを返すように、ブールのインデックスを使用することができます。

In [1066]: df[x] 
Out[1066]: 
    phoneNumber count 
0 08034303939  11 
1 08034382919  11 
3 09039292921  11 
関連する問題