[英]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.getInfo(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.