2016-11-17 8 views
1

を考えると、この -予期しないpandas.Series.replace()の挙動

import pandas as pd

s = pd.Series(['', '1', '2', '', '4', '', '6'])

なぜ、この - この中

s.replace('', None).values

結果 -

array(['', '1', '2', '2', '4', '4', '6'], dtype=object)

私はこれを期待 -

array([None, '1', '2', None, '4', None, '6'], dtype=object)

+0

使用 's.replace([ '']、[なし])と同じである今のvalues'。あなたが望むものとして。 –

答えて

4

なしの使用が問題となります。

なし

types.NoneTypeの唯一の値:あなたは引数にNoneを渡していない場合は、その(docs)のデフォルト値を使用します。 は、デフォルトの引数が関数に渡されないときのように、値が存在しないことを表すためによく使用されません。

従ってs.replace('', None)は、s.replace('')と同じです。明らかに値が渡されないときのデフォルトのアクションは、Seriesを順方向に入力することです。代わりに、あなたはnp.nan使用することができます。

pd.Series(['', '1', '2', '', '4', '', '6']).replace('', np.nan) 
Out: 
0 NaN 
1  1 
2  2 
3 NaN 
4  4 
5 NaN 
6  6 
dtype: object 

または辞書を渡すを:

s.replace({'': None}) 
Out: 
0 None 
1  1 
2  2 
3 None 
4  4 
5 None 
6  6 
dtype: object