req = requests.get("https://data.cityofnewyork.us/api/views/25th-nujf/rows.xml?accessType=DOWNLOAD",proxies=proxies)
doc=etree.fromstring(req.content)
lst = doc.findall('row/row')
print(lst[0])
<Element row at 0x26953028fc8>
如何将列表制作成数据帧,以便可以轻松访问数据而不是获取Element row at 0x26953028fc8
?
希望使用以下列标题设置数据帧的格式:_id brth_yr gndr ethncty nm cnt rnk
提前感谢!
上面的代码中发生的事情是你正在打印出lst
中第一行的类型。
要回答您的问题,您可以将 XML 直接加载到数据帧中,而无需使用列表。
我在下面的代码中,我正在使用 urllib 下载 XML。
然后,我将创建一个名为 xml_doc 的 etree 元素的实例,并使用上面下载的 XML 填充该实例。
接下来,我将使用您上面请求的前 2 个列标题将数据框列索引定义为列表。
然后循环访问我的 XML 元素xml_doc
沿我进行时将每一行附加到数据框。最后,对dframe.head()
的调用默认会显示前 5 行,如果调用 dframe.head(10(,它将显示前 10 行。
您必须展开 dfcols 以包含所需的所有列标题,并对dframe.append()
中的调用pd.Series()
执行相同的操作。
import xml.etree.ElementTree as ET
import pandas as pd
import urllib.request as request
response = request.urlopen('https://data.cityofnewyork.us/api/views/25th- nujf/rows.xml?accessType=DOWNLOAD')
xml_string = response.read()
xml_doc = ET.fromstring(xml_string)
dfcols = ['_id', 'brth_yr']
dframe = pd.DataFrame(columns=dfcols)
for i in xml_doc.iter(tag='row'):
dframe = dframe.append(pd.Series([i.get('_id'),i.get('brth_yr')], index=dfcols),ignore_index=True)
dframe.head()