2016-09-16 8 views
1

長さと文字が異なる文字列を含むpandasデータフレームがあります。例えば部分文字列の一致に基づいてパンダデータフレームをフィルタリングする

print df['name'][0] 
print df['name'][1] 
print df['name'][2] 
print df['name'][3] 

はこのような何かを返すでしょう:私は何をしたいか

UserId : Z5QF1X33A 
loginId : test.user 
UserId : 0000; searchText : Cap 
accountSampleToExclude : 0; accountSampleName : Sample Text; UserId : Z5QF1X33A; accountSampleType : Test; accountSample : Test 

する列を解析することが可能とだけように基づいて、実際の関連IDを返すです上記の例:

Z5QF1X33A 
test.user 
0000
Z5QF1X33A 

私はregexがtを解くのに簡単なアプローチであると考えました彼の、これまでのところ、私は部分的にしか例にはいくつかのハードコードされた擬似的な解決策を考え出すことができました:

df['name'][0] 
df['name'][1] 

しかしwouldnに類似している行のために働くだろう

df['name'] = df['name'].str.strip(r'(?<=\UserId :).*') 
df['name'] = df['name'].str.strip(r'(?<=\loginId :).*') 

他の場合には働きません。任意の助けが大いに感謝されるだろう、私は正規表現なしで、おそらくちょうどstr.split()メソッドを使用して解決することができますが、pythonicおよび/またはパンダの方法で続行する方法がわかりません。

答えて

0

はこれを試してください:

これは、例えば作品
In [31]: df.name.str.extract(r'\b(?:UserId|loginId)\s*:\s*\b([^\s]+)\b', expand=True) 
Out[31]: 
      0 
0 Z5QF1X33A 
1 test.user 
2 0000
3 Z5QF1X33A 
+0

、しかし、あまりにも冗長ではない(?正規表現を使用せずに)これにアプローチするよりニシキヘビ方法があります。 – astateofsanj

+0

@ user3356075、 "regex'sを使用して"何が間違っていますか? – MaxU

関連する問題