2016-04-13 6 views
4

私はシリーズでpandas str.replaceを使用する際に問題に直面しています。私はJupyterノートブックでパンダを使用しています(結果は通常のPythonスクリプトと同じですが)。パンダstr.replace

import pandas as pd 
s = ["abc | def"] 
df = pd.DataFrame(data=s) 

print(s[0].replace(" | ", "@")) 
print(df[0].str.replace("| ", "@")) 
print(df[0].map(lambda v: v.replace("| ", "@"))) 

は、ここでは、パイプを逃れる場合、それが動作する結果

ipython Untitled1.py 

[email protected] 
0 @[email protected]@[email protected] @|@ @[email protected]@[email protected] 
Name: 0, dtype: object 
0 abc @def 
Name: 0, dtype: object 
+0

コードをプレーンテキストとして貼り付け、ほとんど役に立たないコードスクリーンショットを使用する代わりに、コードとしてマークします。 – Boud

+0

申し訳ありません、私は今それをやっています。 –

+0

また、間違っていると思われるものに直接注意を喚起してください。すべてが動作しているように見えます。混乱のある箇所を指摘するのは難しいです。 (正規表現として解釈されることは期待していないと思うが、確かに良いと思う。) – DSM

答えて

2

です。

>>> df[0].str.replace(" \| ", "@") 
0 [email protected] 
Name: 0, dtype: object 

str.replace関数はre.subと等価である:

import re 

>>> re.sub(' | ', '@', "abc | def") 
'[email protected]|@def' 

>>> "abc | def".replace(' | ', '@') 
'[email protected]' 

Series.str.replace(PAT、REPL、N = -1、ケース= trueの場合、フラグ= 0):オカレンスを交換Series/Indexのパターン/正規表現を他の文字列で置き換えます。 str.replace()またはre.sub()と同じです。

+0

答えをありがとう。したがって、2つの 'replace'メソッドは異なって動作します。 –

+0

['pandas.str.replace'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.replace.html)はドキュメントごとに正規表現を適用します – Boud

+0

私は"文字シーケンスまたは正規表現"と書いてあるので、文書化してください。明確な説明をありがとう。 –