繁体   English   中英

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

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

我一直致力于通过使用他们的 user_id 来提取 flickr 用户的位置(不是纬度和经度,而是人的国家)。 我制作了一个 dataframe (这是数据框) ,其中包含照片 ID、所有者和其他几列。 我的尝试是通过迭代 dataframe 中的所有者列将每个所有者提供给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 个结果。 经过仔细检查,我发现它属于 dataframe 中的最后一个用户。我的 dataframe 有 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'

注意:我将字典转换为列表,因为它更方便

然后,您可以将生成的熊猫系列串联在一起,如下所示:

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

我添加了transpose()因为您可能希望将ID作为索引。 之后,您应该可以按“位置”列进行排序。 希望能有所帮助。

实现这一目标的规范方法是使用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')

暂无
暂无

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

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