python - 将自定义函数应用于数据框中列中的每一行
问题描述
我有一些代码可以提取一个位置的纬度和经度。是这里:
address = 'New York University'
url = 'https://nominatim.openstreetmap.org/search/' + urllib.parse.quote(address) +'?format=json'
response = requests.get(url).json()
print(response[0]["lat"])
print(response[0]["lon"])
我想将此作为函数应用于一长列“地址”。
我见过很多关于“应用”和“地图”的问题,但它们几乎都是简单的数学示例。
这是我昨晚尝试的:
def locate (address):
response = requests.get(url).json()
print(response[0]["lat"])
print(response[0]["lon"])
return
df['lat'] = df['lat'].map(locate)
df['lon'] = df['lon'].map(locate)
这最终只是将第一行 lat / lon 应用于整个 csv。
将代码转换为自定义函数并将其应用于每一行的最佳方法是什么?
提前致谢。
编辑:感谢@PacketLoss 的帮助。我得到一个 indexerror:list index out of range,但它确实适用于他的示例数据框。
这是我用来提取数据的 read_csv:
df = pd.read_csv('C:\\Users\\CIHAnalyst1\\Desktop\\InstitutionLocations.csv', sep=',', error_bad_lines=False, index_col=False, dtype='unicode', encoding = "utf-8", warn_bad_lines=False)
这是数据框中行的文本副本:
address
0 大峡谷大学 1 南新罕布什尔大学 2 西部州长大学 3 佛罗里达国际大学 - 大学 ... 4 宾夕法尼亚州立大学大学公园 ... ... 4292 国际艺术学院有限责任公司 4293 INTERCOAST - 在线 4294 卡罗来纳大学4295 DYERSBURG 州立社区学院 科文顿 4296 ULTIMATE MEDICAL ACADEMY - NY
解决方案
你需要从你的函数中返回你的值,否则什么都不会发生。
我们可以在这里使用 apply 并从 thedf
中传递地址。
data = {'address': ['New York University', 'Sydney Opera House', 'Paris', 'SupeRduperFakeAddress']}
df = pd.DataFrame(data)
def locate(row):
url = 'https://nominatim.openstreetmap.org/search/' + urllib.parse.quote(row['address']) +'?format=json'
response = requests.get(url).json()
if response:
row['lat'] = response[0]['lat']
row['lon'] = response[0]['lon']
return row
df = df.apply(locate, axis=1)
输出
address lat lon
0 New York University 40.72925325 -73.99625393609625
1 Sydney Opera House -33.85719805 151.21512338473752
2 Paris 48.8566969 2.3514616
3 SupeRduperFakeAddress NaN NaN
推荐阅读
- database - 在 Oracle 12 中创建数据库快照
- amazon-web-services - 如何在 AWS 中找到有关现有资源的正确 ID 以便导入 Terraform 资源?
- tcl - 如何解释 openOCD 手册中的 tcl 命令
- c - 为什么在函数中声明字符串参数需要C中的指针?
- sql - 使用 date_trunc 自定义一周的范围
- netlify-cms - Netlify CMS 如何在其 UI 中对集合进行排序?
- c# - 慢正则表达式拆分
- c++ - C++:在类中声明指向数组的指针?
- kubernetes - Failed to install rook on k8s cluster
- html - 为什么盒子没有正确对齐?