繁体   English   中英

为每一行运行一个函数并创建一个新的 Column Pandas Dataframe

[英]Run a function for each row and create a new Column Pandas Dataframe

我正在使用 geoprapy 通过 URL 获取位置。 我的 DataFrame 有一个 URL 列。 我试图在每个 URL 上运行一个预先构建的 Geograpy 函数,并在 DataFrame 上创建一个新的位置列。 所以,我尝试过(来自其他问题):

hits['place'] = geograpy.get_place_context(url=hits.urls)

# and

hits['place'] = hits.apply(geograpy.get_place_context(url=hits.urls), axis=1))

# and

def getPlace(frame):
    urls = frame['urls']
    print(urls)
    frame['place'] = geograpy.get_place_context(url=urls)
    return frame

getPlace(hits)

与其他一些人一起。 我不断得到

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我的理解是它将 URL 视为整个列并且无法在该列上运行该函数? 真的无所谓。

如何为数据框中的每一行运行一个函数并创建一个新列?

我希望我的位置是一个“内存类型对象”,我可以稍后引用。 我有一部分可以通过以下方式工作:

for url in urls:
    place = (geograpy.get_place_context(url=url))
    region = place.country_regions

然而,在代码的后面,迭代导致它分崩离析。

pandas.apply 函数完全符合您的要求,只是您没有传递正确的参数。 你可以在文档中看到你需要传递一个函数,而不是函数调用的结果。

所以,只需通过 geograpy.get_place_context 来申请 -

hits['place'] = hits['urls'].apply(geograpy.get_place_context, axis=1)

您应该在urls列上使用.apply() ,例如:

hits['place'] = hits['urls'].apply(geograpy.get_place_context, axis=1)

这个答案有助于找到不同矢量化方法及其用法之间的区别。 希望你也觉得它有用。

编辑:由于只有一列用于创建另一列, .apply()该列上的.apply()应该适合您。 .apply()是在DataFrameSeries

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM