【发布时间】:2021-02-22 16:10:27
【问题描述】:
我是 python 新手,我正在尝试使用人口普查地理编码服务 API 对地址进行地理编码,然后将输出转换为数据框。我已经能够读取我的地址文件并且可以看到输出,但我似乎无法弄清楚如何将其导入数据框。我提供了我在下面使用的代码以及地址文件的内容。
输出似乎不是 JSON 格式,而是 CSV。我尝试像导入 CSV 文件一样导入输出,但我不知道如何像导入 CSV 文件一样导入变量,也不知道如何将输出导出到我可以的 CSV 文件导入。
描述 API 的 URL 是https://geocoding.geo.census.gov/geocode...es_API.pdf
import requests
import pandas as pd
import json
url = 'https://geocoding.geo.census.gov/geocoder/geographies/addressbatch'
payload = {'benchmark':'Public_AR_Current','vintage':'Current_Current'}
files = {'addressFile': ('C:\PYTHON_CLASS\CSV\ADDRESS_SAMPLE.csv', open('C:\PYTHON_CLASS\CSV\ADDRESS_SAMPLE.csv', 'rb'), 'text/csv')}
response = requests.post(url, files=files, data = payload)
type(response)
print(response.text)
-我尝试了下面的代码(在许多其他版本中),这是我通常导入 CSV 文件的方式,但它会生成错误消息“无效的文件路径或缓冲区对象类型:
df = pd.read_csv(response)
我用来生成地理编码的地址文件的内容是:
id、地址、城市、州、邮政编码 1,1600 宾夕法尼亚大道 NW,华盛顿特区,20500 2,4 S Market St,波士顿,MA,02109 3,1200 Getty Center Drive,洛杉矶,CA,90049 4,1800 Congress Ave,奥斯汀,TX,78701 5,One Caesars Palace Drive,拉斯维加斯,NV,89109 6,1060 West Addison,芝加哥,IL,60613 7,One East 161st Street,Bronx,NY,10451 8,201 E Jefferson St,Phoenix,AZ,85004 9,600 N 1st Ave,Minneapolis,MN,55403 10,400 W Church St,Orlando,FL,32801
输出如下图:
print(response.text)
"1","1600 Pennsylvania Avenue NW, Washington, DC, 20500","Match","Non_Exact","1600 PENNSYLVANIA AVE NW, WASHINGTON, DC, 20006","-77.03535,38.898754","76225813 ","L","11","001","006202","1031" "2","4 S Market St, Boston, MA, 02109","Match","Exact","4 S MARKET ST, BOSTON, MA, 02109","-71.05566,42.359936","85723841"," R","25","025","030300","2017" "3","1200 Getty Center Drive, Los Angeles, CA, 90049","Match","Exact","1200 GETTY CENTER DR, LOS ANGELES, CA, 90049","-118.47564,34.08857","142816014" ,"L","06","037","262302","1005" "4","1800 Congress Ave, Austin, TX, 78701","Match","Exact","1800 CONGRESS AVE, AUSTIN, TX, 78701","-97.73847,30.279745","63946318","L" ,"48","453","000700","1007" "5","One Caesars Palace Drive, Las Vegas, NV, 89109","No_Match" "6","1060 West Addison, Chicago, IL, 60613","Match","Non_Exact","1060 W ADDISON ST, CHICAGO, IL, 60613","-87.65581,41.947227","111863716","R ","17","031","061100","1014" "7","One East 161st Street, Bronx, NY, 10451","No_Match" "8","201 E Jefferson St, Phoenix, AZ, 85004","Match","Exact","201 E Jefferson St, PHOENIX, AZ, 85004","-112.07113,33.44675","128300920"," L","04","013","114100","1058" "9","600 N 1st Ave, Minneapolis, MN, 55403","No_Match" "id","地址、城市、州、邮政编码","No_Match" "10","400 W Church St, Orlando, FL, 32801","Match","Exact","400 W CHURCH ST, ORLANDO, FL, 32801","-81.38436,28.540176","94416807"," L","12","095","010500","1002"
response.text 的输出是:
'"1","1600 Pennsylvania Avenue NW, Washington, DC, 20500","Match","Non_Exact","1600 PENNSYLVANIA AVE NW, WASHINGTON, DC, 20006","-77.03535,38.898754"," 76225813","L","11","001","006202","1031"\n"2","4 S Market St, Boston, MA, 02109","Match","Exact"," 4 S MARKET ST, BOSTON, MA, 02109","-71.05566,42.359936","85723841","R","25","025","030300","2017"\n"3","1200 Getty Center Drive, Los Angeles, CA, 90049","Match","Exact","1200 GETTY CENTER DR, LOS ANGELES, CA, 90049","-118.47564,34.08857","142816014","L"," 06","037","262302","1005"\n"4","1800 Congress Ave, Austin, TX, 78701","Match","Exact","1800 CONGRESS AVE, AUSTIN, TX, 78701 ","-97.73847,30.279745","63946318","L","48","453","000700","1007"\n"5","One Caesars Palace Drive, Las Vegas, NV, 89109 ","No_Match"\n"6","1060 West Addison, Chicago, IL, 60613","Match","Non_Exact","1060 W ADDISON ST, CHICAGO, IL, 60613","-87.65581,41.947227" ,"111863716","R","17","031","061100","1014"\n"7","One East 161st Street, Bronx, NY, 10451","No_Match"\n"8 ","201 E Jefferson St, Phoenix, AZ, 85004","Match","Exact","201 E JEFFERSON ST, PHOENIX, AZ, 85004","-112.07113,33.44675","128300920","L","04" ,"013","114100","1058"\n"9","600 N 1st Ave, Minneapolis, MN, 55403","No_Match"\n"id","地址、城市、州、邮政编码", "No_Match"\n"10","400 W Church St, Orlando, FL, 32801","Match","Exact","400 W CHURCH ST, ORLANDO, FL, 32801","-81.38436,28.540176", "94416807","L","12","095","010500","1002"\n'
当我尝试时
df = pd.read_csv(io.StringIO(response), sep=',', header=None, quoting=csv.QUOTE_ALL)
我收到了错误消息
TypeError Traceback (most recent call last)
<ipython-input-60-55e6c5ac54af> in <module>
----> 1 df = pd.read_csv(io.StringIO(response), sep=',', header=None, quoting=csv.QUOTE_ALL)
TypeError: initial_value must be str or None, not Response
当我尝试时
df = pd.read_csv(io.StringIO(response.replace('" "', '"\n"')), sep=',', header=None, quoting=csv.QUOTE_ALL)
我明白了
AttributeError Traceback (most recent call last)
<ipython-input-61-a92a7ffcf170> in <module>
----> 1 df = pd.read_csv(io.StringIO(response.replace('" "', '"\n"')), sep=',', header=None, quoting=csv.QUOTE_ALL)
AttributeError: 'Response' object has no attribute 'replace'
【问题讨论】:
标签: python pandas api dataframe python-requests