首页 > 解决方案 > 如何在 HTTP 请求中使用 pandas DF 作为参数

问题描述

我有一个来自 excel 文件的地点列表,我会用地名 ID 来丰富它。从 excel 文件开始,我制作了一个 pandas 数据框,然后我将使用 DF 中的值作为我的请求中的参数。这是我制作的脚本

import pandas as pd 


import requests
import json


require_cols = [1] 


required_df = pd.read_excel('grp.xlsx', usecols = require_cols) 

print(required_df)

url = 'http://api.geonames.org/searchJSON?'

params = {  'username': "XXXXXXXX",

            'name_equals': (required_df),

            'maxRows': "1"}

e = requests.get(url, params=params)

pretty_json = json.loads(e.content)
print (json.dumps(pretty_json, indent=2))

问题与此参数的定义有关:


 'name_equals': (required_df)

我将使用 DF 中的 Places(大约 15k)作为参数,并递归地检索相关的地理名称 ID,并将输出写入单独的 excel 文件中。

简单的请求有效:

import requests
import json

url = 'http://api.geonames.org/searchJSON?'

params = {  'username': "XXXXXXX",

            'name_equals': "Aire",

            'maxRows': "1"}

e = requests.get(url, params=params)

pretty_json = json.loads(e.content)
print (json.dumps(pretty_json, indent=2))
#print(e.content)

以及 Pandas 数据框的定义:

# import pandas lib as pd 
import pandas as pd 

require_cols = [0,1] 

# only read specific columns from an excel file 
required_df = pd.read_excel('grp.xlsx', usecols = require_cols) 

print(required_df) 

我也尝试通过SPARQL没有结果,所以我决定通过 Python。

谢谢你的时间。

标签: pythonpandas

解决方案


您可以使用for-loop

import pandas as pd

df = pd.DataFrame({'Places': ['London', 'Paris', 'Berlin']})

for item in df['Places']:
    print('requests for:', item)
    # ... rest of code ...

或者df.apply()

import pandas as pd

def run(item):
    print('requests for:', item)
    # ... rest of code ...
    return 'result for ' + item

df = pd.DataFrame({'Places': ['London', 'Paris', 'Berlin']})

df['Results'] = df['Places'].apply(run)

推荐阅读