2016-10-11 11 views
2

ある特定の列の一部の行がNaNであるPandas DataFrameにマッピングを適用したいとします。これらは、以前のマッピングから残されています。ここで NaNのDataFrame行にマップを適用

mymap = defaultdict(str) 
mymap["a"] = "-1 test" 
mymap["b"] = "-2 test" 
mymap["c"] = "-3 test" 

df[ df["my_infos"].isnull() ] = df["something"].map(lambda ip: map_function(ip, mymap)) 

は関数である。

def map_function(ip, mymap): 
    # do stuff 
    for key, value in mymap.iteritems(): 
      # do stuff 
      return stuff 
    return other_stuff 

これは、それが全体のカラムを反復処理した後に終了しますが、例を示します

File "/opt/anaconda2/lib/python2.7/site-packages/pandas/core/indexing.py", line 527, in _setitem_with_indexer raise ValueError('Must have equal len keys and value ' ValueError: Must have equal len keys and value when setting with an iterable

はこの内のすべての行を選択するための正しい方法ですmy_infosカラムはNaNですか?私はどういうわけか...それはそうではありません。

+1

IIUCあなたは両側をマスクする必要があります:[[ "my_infos" DF] ISNULL()] 'df.loc = DF map(lambda ip:map_function(ip、mymap)) '問題は、あなたが左側をマスクしているが右側をマスクしていないことです。形状が一致しない – EdChum

答えて

1

私はあなたが両側にNaN値を選択してmapことができると思います。

df[ df["my_infos"].isnull() ] = 
df.ix[ df["my_infos"].isnull(), "something"].map(lambda ip: map_function(ip, mymap)) 
関連する問題