XML to Dataframe Python


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()

最新更新