2017-11-06 6 views
2

がNaNにこれらのドットを変換するにはパンダの正規表現との矛盾 "。"ドットメタキャラクター?

df 

       Cost 
Store 1  22.5 
Store 1 ......... 
Store 2  ... 

を考えてみましょう、私は使用することができます。

df.replace('^\.+$', np.nan, regex=True) 

     Cost 
Store 1 22.5 
Store 1 NaN 
Store 2 NaN 

次のパターンでも動作しますなぜ私は理解していないことである。

df.replace('^.+$', np.nan, regex=True) 

     Cost 
Store 1 22.5 
Store 1 NaN 
Store 2 NaN 

この場合、私は.をエスケープしていないので、マッチオール文字として扱われ、すべての単一の行がNaNに変換されることに注意してください。しかしそれはありません.... ....の行だけが一致します...私はマッチオール文字を使用しましたが、です。空の文字列を返します

import re 
re.sub('^.+$', '', '22.5') 
'' 

:と

コントラストこれ。

何が起こっているのですか?

答えて

2

この質問を書いて途中では、私はこの問題は何であったか実現:

df.Cost.dtype 
dtype('O') 

df.Cost.values 
array([22.5, '.........', '...'], dtype=object) 

しようとするときに、22.5が非文字列の値を超える単純スキップを数値であることを起こる、と正規表現パターン交換する。 astypeの変換を行うと、明らかになります。

df.astype(str).replace('.+', np.nan, regex=True) 

     Cost 
Store 1 NaN 
Store 1 NaN 
Store 2 NaN 

問題が解決しました。他の誰かがこれによって混乱した場合に備えてこれを残しておきます。

+0

あなた自身の回答をマークすることができます – PJProudhon

+0

@PJProudhonあなたは48時間が経過するまでできません。 –

+0

申し訳ありませんが、その制限はわかりませんでした。 – PJProudhon