我正在使用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
但是,在代码的后面,迭代使它崩溃了。
答案 0 :(得分:1)
pandas.apply函数完全可以实现您想要的功能,只是您没有传递正确的参数。 您可以在documentation中看到需要传递一个函数,而不是函数调用的结果。
因此,只需传递geograpy.get_place_context即可应用-
hits['place'] = hits['urls'].apply(geograpy.get_place_context, axis=1))
答案 1 :(得分:0)
您应该在.apply()
列上使用urls
,例如:
hits['place'] = hits['urls'].apply(geograpy.get_place_context, axis=1)
This的答案有助于发现不同向量化方法及其用法之间的区别。希望您也觉得它有用。
编辑:由于仅使用一列来创建另一列,因此该列上的.apply()
应该对您来说很好。 .apply()
是在DataFrame
和Series
上定义的。