簡體   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