2016-12-08 5 views
0

私は一緒に行くことができる特定の文字がある文字列のシリーズオブジェクトを持っています。例えば、[]の終了文字と一つは、私は単に私がこのような結果のデータフレームの構築を支援する必要があり、最後にデータが、これらの文字をきれいにすることができます()文字列クリーニングを使用してシリーズオブジェクトをデータフレームに変換する方法

s = pd.Series(['September[jk]', 'firember hfh(start)','secmber(end)','Last day(hjh)', 
       'October[jk]','firober fhfh (start)','thber(marg)','lasber(sth)', 
       'December[jk]','anober(start)','secber(start)','Another(hkjl)']) 

の終了文字とそれらに対応します

0 September firember hfh 
1 September secmber 
2 September Last day 
3 October firober fhfh 
4 October  thber 
5 October lasber 
6 December anober 
7 December secber 
8 December Another 
+0

「firober fhfh(開始)」が「firober」になるとどう思いますか? 'Last day(hjh)'は 'Last day'になります。 –

+0

申し訳ありませんが、Firoberのみ。トランケートされたものはシンボルでなければなりません。ありがとうございます –

+0

私はあなたがあなたの質問を編集したのを見て、それはより理にかなっています。 –

答えて

0

私はここでどんな魔法がないと思うので、私はデータフレームを作成する前に、リストを自分で解析するお勧めします。

import re 
import pandas as pd 

l = ['September[jk]', 'firember hfh(start)','secmber(end)','Last day(hjh)', 
       'October[jk]','firober fhfh (start)','thber(marg)','lasber(sth)', 
       'December[jk]','anober(start)','secber(start)','Another(hkjl)'] 

month = None 
mylist = [] 
for i, el in enumerate(l): 
    m = re.match('(.*?)\[.*?\]', el) 
    if m: 
     month = m.groups()[0] 
    else: 
     m = re.match('(.*?)\(.*?\)', el) 
     if m: 
      mylist.append({'Month':month, 'Value':m.groups()[0]}) 
     else: 
      print("Cannot find a match for {}".format(el)) 

df = pd.DataFrame(mylist) 
print(df) 
 Month   Value 
0 September firember hfh 
1 September  secmber 
2 September  Last day 
3 October firober fhfh 
4 October   thber 
5 October   lasber 
6 December   anober 
7 December   secber 
8 December  Another 

サイドノート:アウトそれは、より多くの複雑な状況に適合させることができるので、私は正規表現のための reライブラリを使用しますが、あなたのケースであなただけの inで、組み込み関数を使用することができますそして、 split
for i, el in enumerate(l): 
    if '[' in el: 
     month = el.split('[')[0] 
    else: 
     if '(' in el: 
      mylist.append({'Month':month, 'Value':el.split('(')[0]}) 
     else: 
      print("Cannot find a match for {}".format(el)) 
+0

ありがとうございます。ジュリアンそれは良い方法です。私の場合は、オブジェクトのようなバイト上に文字列パターンを使用することを拒否しています。たとえ私がそれに "b"を追加してもそれは拒否します。もう一度あなたの助けに大変感謝します –

+0

私はちょうど私のコード(私は文字列としてリストを定義する)を実行しようとしましたか?それはうまくいくはずです。どのバージョンのPythonをお使いですか? –

+0

python 3.コードが正しく実行され、正しく動作します。しかし、私はそれがどのように 'numpy.int64'はiterableではないと言うのか分からない。シリーズを文字列に変換すると、文字列オブジェクトのバイト型パターンを使用して返信します –

関連する問題