将映射应用于包含NaN的DataFrame行

3

我希望对Pandas DataFrame应用映射,其中一列中的某些行是NaN。这些是之前映射留下的遗留问题。

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

当迭代整个列后,此操作将终止,但显示:

文件 "/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
如果我理解正确,您需要遮蔽两侧:df.loc[ df["my_infos"].isnull() ] = df.loc[df['my_infos'].isnull(), "something"].map(lambda ip: map_function(ip, mymap)) 问题在于您只遮蔽了左侧而没有遮蔽右侧,因此形状不匹配。 - EdChum
1个回答

2

我认为你可以选择在两侧都有 NaN 值,然后进行map操作:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接