如何将 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.getInfo(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')
我一直致力于通过 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.getInfo(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')