gpt4 book ai didi

python - 将邮政编码 API 调用应用于数据框中的每一行

转载 作者:行者123 更新时间:2023-12-02 18:32:08 25 4
gpt4 key购买 nike

在下面的代码块中,我有一个数据框,geo ,我想对其进行迭代以获得 geo 中每个英国邮政编码的东向、北向、经度和纬度。 .我编写了一个调用 API 的函数和另一个返回四个变量的函数。

我测试了 get_data使用邮政编码调用以证明它有效(这是任何人都可以使用的公共(public) API):

import requests 
import pandas as pd

geo = spark.table('property_address').toPandas()


def call_api(url: str) -> dict:
postcode_response =requests.get(url)
return postcode_response.json()

def get_data(postcode):

url = f"http://api.getthedata.com/postcode/{postcode}"

req = r.get(url)


results = req.json()['data']
easting = results['easting']
northing = results['northing']
latitude = results['latitude']
longitude = results ['longitude']

return easting ,northing,latitude, longitude

get_data('SW1A 1AA')

返回:

Out[108]: (529090, 179645, '51.501009', '-0.141588')

我想做的是为 geo 中的每一行运行它并将其作为数据集返回。我的研究使我找到了 apply ,我的尝试基于 this guide .

我正在尝试传递一个名为 property_postcode 的列在 geo并迭代每一行以返回值,这是我的尝试:

def get_columns(row):
column_name = 'property_postcode'
api_param = row[column_name]
easting,northing,latitude,longitude = get_data(api_param)
row['east'] = easting
row['north'] = northing
row['lat'] = latitude
row['long'] = longitude
return row

geo= geo.apply(get_columns, axis=1)

display(geo)

我得到的错误是

`JSONDecodeError: Expecting value: line 1 column 1 (char 0)`

并没有告诉我很多。寻求帮助\指点。

最佳答案

与其尝试在函数中设置东、北、纬度和经度列的值,不如从函数中返回它们。

from numpy import result_type
import requests
import pandas as pd

# geo = spark.table('property_address').toPandas()


def call_api(url: str) -> dict:
postcode_response = requests.get(url)
return postcode_response.json()


def get_data(postcode):
url = f"http://api.getthedata.com/postcode/{postcode}"
req = requests.get(url)

if req.json()["status"] == "match":
results = req.json()["data"]
easting = results.get("easting")
northing = results.get("northing")
latitude = results.get("latitude")
longitude = results.get("longitude")
else:
easting = None
northing = None
latitude = None
longitude = None

return easting, northing, latitude, longitude


def get_columns(code):
api_param = code
return get_data(api_param)


df = pd.DataFrame(
{
"property_postcode": [
"BE21 6NZ",
"SW1A 1AA",
"W1A 1AA",
"DE21",
"B31",
"ST16 2NY",
"S65 1EN",
]
}
)

df[["east", "north", "lat", "long"]] = df.apply(
lambda row: get_columns(row["property_postcode"]), axis=1, result_type="expand"
)

print(df)

<表类="s-表"><头>property_postcode<日>东 <日>北 <日>纬度 长<正文>BE21 6NZNaNNaN无无SW1A 1AA52909017964551.501009-0.141588W1A 1AA52888718159351.518561-0.143799DE21NaNNaN无无B31NaNNaN无无ST16 2纽约39191332354052.809346-2.121413S65 1CN44483039408253.44163-1.326573

关于python - 将邮政编码 API 调用应用于数据框中的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69286909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com