XML в Dataframe Python - PullRequest
       1

XML в Dataframe Python

0 голосов
/ 26 сентября 2018
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

Заранее спасибо!

1 Ответ

0 голосов
/ 26 сентября 2018

То, что происходит в приведенном выше коде, заключается в том, что вы печатаете тип первой «строки» в lst.

Чтобы ответить на ваш вопрос, вы можете загрузить XML непосредственно в DataFrame без использования списка.

Я мой код ниже Я использую urllib для загрузки XML.

Затем я создаю экземпляр элемента etree с именем xml_doc и заполняю его XML-файлом, загруженным выше.

Далее я определяю индекс столбца моего фрейма данных как список, используя первый2 заголовка столбца, которые вы запросили выше.

И затем перебираем мой элемент XML xml_doc, добавляя каждую строку во фрейм данных, когда я иду.Наконец, вызов dframe.head() отобразит первые 5 строк по умолчанию, если вы вызовете dframe.head (10), он отобразит первые десять строк.

Вам нужно будет расширить dfcols, включив в него все нужные заголовки столбцов, и сделать то же самое для вызова pd.Series() в dframe.append().

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...