首页 > 解决方案 > 创建新列时 Pandas 的 apply() 和 Python 的 map() 之间的区别?

问题描述

我有一个df包含我的项目的一些参考资料,例如:

           root_path   Credentials
Project1   path/to/    cred1.json
Project2   path/to/    cred2.json
Project3   path/to/    cred3.json

我需要第三列Client来保存到 BigQuery API 的连接响应,这是一个对象。传递给函数的参数是由 组成的字符串df['root_path'] + df['Credentials']。为此,我尝试了这两个查询:

  1. 使用apply()

    df['Client'] = df.apply(lambda x : bigquery.Client.from_service_account_json((df['root_path'] + df['Credentials']).values), axis = 1)

  2. 使用map()

    df['Client'] = map(lambda root,bq : bigquery.Client.from_service_account_json(root + bq), df['root_path'], df['Credentials'])

最后,第二个查询给了我想要的结果。有人能解释一下为什么第二个有效而第一个无效吗?据我了解,这是因为第一个查询每次都返回整个系列的对象,而第二个查询则逐行调用该函数。

提前致谢。

标签: pythonpandasdataframeapplyseries

解决方案


推荐阅读