我很难理解df.apply()
到底是如何工作的。
我的问题如下:我有一个数据帧df
。现在我想在几列中搜索某些字符串。如果在任何列中找到字符串,我要为找到该字符串的每一行添加一个“标签”(在新列中)。
我能用map
和applymap
解决问题(见下文)。
但是,我希望更好的解决方案是使用apply
,因为它将函数应用于整个列。
apply
这不可能吗?我的错误在哪里?这里是我使用map
和applymap
的解决方案。
df = pd.DataFrame([list("ABCDZ"),list("EAGHY"), list("IJKLA")], columns = ["h1","h2","h3","h4", "h5"])
map
def setlabel_func(column):
return df[column].str.contains("A")
mask = sum(map(setlabel_func, ["h1","h5"]))
df.ix[mask==1,"New Column"] = "Label"
applymap
mask = df[["h1","h5"]].applymap(lambda el: True if re.match("A",el) else False).T.any()
df.ix[mask == True, "New Column"] = "Label"
对于apply
我不知道如何将这两列传递到函数中/或者可能根本不了解机制;-)
def setlabel_func(column):
return df[column].str.contains("A")
df.apply(setlabel_func(["h1","h5"]),axis = 1)
上面提醒我。
'DataFrame' object has no attribute 'str'
有什么建议吗?请注意,实际应用程序中的搜索函数更复杂,需要一个regex函数,这就是我首先使用.str.contain
的原因。
另一种解决方案是使用^{} 获取每行至少一个
True
:你可以这样做:
pd.DataFrame.apply
遍历每个列,将列作为pd.Series
传递给要应用的函数。在您的例子中,您试图应用的函数不适合在apply
中使用这样做是为了让你的想法发挥作用
相关问题 更多 >
编程相关推荐