2017-02-19 6 views
0

私はBeautifulSoupとpandasを使用して、エラーコードと対応するエラーメッセージを含む列を含むcsvを作成しました。pandas列の内容を書式設定します。末尾のテキストと数字の削除

フォーマットする前に、列はこの

-132456ErrorMessage 
-3254Some other Error 
-45466You've now used 3 different examples. 2 more to go. 
-10240 This time there was a space.  
-1232113That was a long number. 

のようなものを見て、私は正常にこのようなコードのテキストを分離しました:

dfDSError['text'] = dfDSError['text'].map(lambda x: x.lstrip('-')) 

これは私が欲しいものだけを返します。

しかし、私はコードの解決策を考え出すのに苦労してきました。

dfDSError['codes'] = dfDSError['codes'].replace(regex=True,to_replace= r'\D',value=r'') 

しかし、それはコード番号の末尾にエラーメッセージから番号を追加します:

は、私はこれを試してみました。したがって、45466の代わりに上記の3番目の例では、私は4546632を得るでしょう。また、マイナス符号の先頭を保持したいと思います。

私は何とかrstrip()を正規表現と組み合わせて、スペースの隣にスペースがないと判断し、他のものをすべて削除することができたと思ったが、失敗しました。

for_removal = re.compile(r'\d\D*') 
dfDSError['codes'] = dfDSError['codes'].map(lambda x: x.rstrip(re.findall(for_removal,x)))       
TypeError: rstrip arg must be None, unicode or str 

お勧めはありますか?ありがとう!

答えて

0

あなたはextractを使用することができます。

dfDSError[['code','text']] = dfDSError.text.str.extract('([-0-9]+)(.*)', expand=True) 
print (dfDSError) 
               text  code 
0          ErrorMessage -132456 
1         Some other Error  -3254 
2 You've now used 3 different examples. 2 more t... -45466 
3     This time there was a space.  -10240 
4       That was a long number. -1232113 
関連する問題