I am trying to get data form Census Track data in Anaconda and jupyter-nootbook using Pandas, but I am keep getting error. My code:
import pandas as pd
import numpy as np
import requests
import geopandas as gpd
year = '2021'
variable = 'B09019_003E'
with open (r"pathToKeyFile/census_api.txt", "r") as f:
c = f.read();
url='https://api.census.gov/data/{0}/acs/acs5?get=NAME,{1}&for=tract:*&in=state:12%20county:057&key={2}'\
.format(year, variable, c)
response = requests.request("GET",url)
response.raise_for_status()
print(response.json)
temp = pd.DataFrame(response.json()[1:], columns=response.json()[0])
'print(response.json)' output:
b'\n<html>\n <head>\n <title>Invalid Key</title>\n </head>\n <body>\n <p>\n A valid <em>key</em> must be included with each data API request.\n You included a key with this request, however, it is not valid.\n Please check your key and try again.\n </p>\n <p>\n If you do not have a key you may sign up for one <a href="key_signup.html">here</a>.\n </p>\n </body>\n</html>\n'
My census_api.txt only contains the key. This is the error when running pd.DataFrame()
SONDecodeError Traceback (most recent call last)
File C:\ProgramData\anaconda3\lib\site-packages\requests\models.py:971, in Response.json(self, **kwargs)
970 try:
--> 971 return complexjson.loads(self.text, **kwargs)
972 except JSONDecodeError as e:
973 # Catch JSON-related errors and raise as requests.JSONDecodeError
974 # This aliases json.JSONDecodeError and simplejson.JSONDecodeError
File C:\ProgramData\anaconda3\lib\json\__init__.py:346, in loads(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
343 if (cls is None and object_hook is None and
344 parse_int is None and parse_float is None and
345 parse_constant is None and object_pairs_hook is None and not kw):
--> 346 return _default_decoder.decode(s)
347 if cls is None:
File C:\ProgramData\anaconda3\lib\json\decoder.py:337, in JSONDecoder.decode(self, s, _w)
333 """Return the Python representation of ``s`` (a ``str`` instance
334 containing a JSON document).
335
336 """
--> 337 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
338 end = _w(s, end).end()
File C:\ProgramData\anaconda3\lib\json\decoder.py:355, in JSONDecoder.raw_decode(self, s, idx)
354 except StopIteration as err:
--> 355 raise JSONDecodeError("Expecting value", s, err.value) from None
356 return obj, end
JSONDecodeError: Expecting value: line 2 column 1 (char 1)
During handling of the above exception, another exception occurred:
JSONDecodeError Traceback (most recent call last)
Cell In[21], line 1
----> 1 temp = pd.DataFrame(response.json()[1:], columns=response.json()[0])
2 temp['state'] = temp['state'].astype('str')
3 temp['county'] = temp['county'].astype('str')
File C:\ProgramData\anaconda3\lib\site-packages\requests\models.py:975, in Response.json(self, **kwargs)
971 return complexjson.loads(self.text, **kwargs)
972 except JSONDecodeError as e:
973 # Catch JSON-related errors and raise as requests.JSONDecodeError
974 # This aliases json.JSONDecodeError and simplejson.JSONDecodeError
--> 975 raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
JSONDecodeError: Expecting value: line 2 column 1 (char 1)
When I open the URL itself it is saying that my API key is invalid, while I am sure it is fine and I have just got that. Any thought on this?!
If you have just received your API key, and activated it, then you have to wait longer for it to actually activate. I checked back within a day and my code began working.
The api will return a 200 OK and give that exact message. Give it some time. It will work.