如何将 user_ids 的数组提供给 flickr.people.getInfo()?

How to feed array of user_ids to flickr.people.getInfo()?

我一直致力于通过 user_ids 提取 flickr 用户的位置(不是纬度和经度,而是人的国家)。我制作了一个数据框 (Here's the dataframe),其中包含照片 ID、所有者和其他几列。我的尝试是通过迭代数据框中的所有者列将每个所有者提供给 flickr.people.getInfo() 查询。这是我的尝试

for index, row in df.iterrows():
     A=np.array(df["owner"])
for i in range(len(A)):
    B=flickr.people.getInfo(user_id=A[i])

不幸的是,它只产生了 1 个结果。经过仔细检查,我发现它属于数据框中的最后一个用户。我的数据框有 250 个观察值。我不知道我怎么能提取其他人。 任何帮助表示赞赏。

您似乎在遍历数据帧时忘记了存储结果。我没有使用 API 但我认为这个片段应该可以做到。

result_dict = {}
for idx, owner in df['owner'].iteritems():
    result_dict[owner] = flickr.people.getInfo(user_id=owner)

结果存储在以用户 id 为键的字典中。

编辑:

因为它是 JSON 你可以使用 read_json 函数来解析结果。 示例:

result_list = []
for idx, owner in df['owner'].iteritems():
    result_list.appen(pd.read_json(json.dumps(flickr.people.get‌​Info(user_id=owner))‌​,orient=list))
    # you may have to set the orient parameter. 
    # Option are: 'split','records','index', Default is 'index'

注意:我把字典改成列表了,比较方便

之后,您可以像这样将生成的 pandas 系列连接在一起:

df = pd.concat(result_list, axis=1).transpose()

我添加了 transpose() 因为您可能希望将 ID 作为索引。 之后您应该能够按 'location' 列排序。 希望对您有所帮助。

实现这一点的规范方法是使用 apply。这样效率会高很多。

import pandas as pd
import numpy as np

np.random.seed(0)

# A function to simulate the call to the API
def get_user_info(id):
    return np.random.randint(id, id + 10)

# Some test data
df = pd.DataFrame({'id': [0,1,2], 'name': ['Pierre', 'Paul', 'Jacques']})

# Here the call is made for each ID
df['info'] = df['id'].apply(get_user_info)

#    id     name  info
# 0   0   Pierre     5
# 1   1     Paul     1
# 2   2  Jacques     5

注意,另一种写法是

df['info'] = df['id'].map(lambda x: get_user_info(x))

在调用方法之前,先有以下几行。

from flickrapi import FlickrAPI

flickr = FlickrAPI(FLICKR_KEY, FLICKR_SECRET, format='parsed-json')