2016-12-21 3 views
1

私はデータフレーム内の列から「#1」を削除する機能を作成しようとしています:変更値

def formatSignalColumn(df): 
    for i,signal in enumerate(df['Signal list']): 
     df = df.set_value(i, 'Signal list', signal.replace(" #1", "")) 
     df = df.set_value(i, 'Signal list', signal.replace(" #2", "")) 
    return df 

しかし、私はこれを通じて自分のデータフレームを渡す際に、それは何も変わらない。

tlog = formatSignalColumn(tlog) 

私は機能外ループのために実行したときに興味深いことに、それはどちらか動作しませんが、私は特にそれが動作isignal値を選択...

i = 0 
signal = tlog['Signal list'][i] 
tlog= tlog.set_value(i, 'Signal list', signal.replace(" #1", "")) 
tlog= tlog.set_value(i, 'Signal list', signal.replace(" #2", "")) 

このdoesnの私には意味がありません。誰にでもアイデアはありますか?

+0

利用できる唯一の方法ではないとして、この上に、人は常にベクトル化の方法を模索してループを避ける必要があります.str.replace( '#1 |#2'、 '') – EdChum

+0

ここで問題となるのは、反復処理中にデータを変更しているため、コピーを作成しているようです。 – EdChum

答えて

2

あなただけstr.replaceをベクトル化し、単一のラインでこれを行うための正規表現パターンを渡す使用することができます:あなたはさらに修正し、DFに渡されたのコピー上で動作していることがわかりました何

In [231]:  
df = pd.DataFrame({'something':[' #1blah', ' #2blah', '#3blah']}) 
df 

Out[231]: 
    something 
0 #1blah 
1 #2blah 
2 #3blah 

In [232]: 
df['something'] = df['something'].str.replace(' #1| #2','') 
df 

Out[232]: 
    something 
0  blah 
1  blah 
2 #3blah 

あなたが反復しているときにデータオブジェクトは良い考えではありません。

ループはほとんどあなたがちょうど `DF [「信号リスト」] =のDF [「信号リスト」]行うことができます

+0

ああ、説明してくれてありがとう! –

+0

私の答えがあなたの質問を解決した場合は、それを受け入れることを忘れないでください。 – EdChum