Python: как я могу проанализировать XML-файл в DataFrame с отсутствующими дочерними элементами?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python: как я могу проанализировать XML-файл в DataFrame с отсутствующими дочерними элементами?

Сообщение Anonymous »

Я пытаюсь проанализировать файл SimpleXML и преобразовать его в фрейм данных. У меня около 3000 записей в XML-файле, и один из нужных мне атрибутов дочернего элемента отсутствует в нескольких записях. Таким образом, примерно на полпути фрейм данных сходит с рельсов (т. е. столбцы отключены).
Вот образец моей структуры XML:

Код: Выделить всё


0123456
mo.howard
[email protected]
USA
Contoso


0123457
larry.fine
Italy
Acme


0123456
curly.howard
[email protected]
USA
Contoso

...
...
...

Примечание *** Не хватает нескольких записей «ns0:userPrincipalName»
Вот пример моего кода:

Код: Выделить всё

   # Parse XML File
wd = open(wdpath + 'wd.xml', 'r')
contents = wd.read()
soup = BeautifulSoup(contents, 'xml')
# Choose appropriate attributes
id = soup.find_all('ns0:employeeID')
email = soup.find_all('ns0:userPrincipalName')
country = soup.find_all('ns0:country')
company = soup.find_all('ns0:company')

data = []
for i in range(0, len(id)):
rows = [email[i].get_text(), country[i].get_text(), company[i].get_text()]
data.append(rows)
# Assign Column names to attributes
ri = pd.DataFrame(data, columns=['Email', 'Country', 'Company'])
ri.to_csv(outpath + 'Report_' + cdt + '.csv', index=False)
*** Вот пример результата, если я перебираю длину электронного письма:
csv
*** Как вы Как видите, информация curly.howard неверна. он продолжает записывать атрибуты «страна» и «компания», но пропускает «электронную почту» вместо того, чтобы писать «Нет», как мне нужно.
Если я запущу это как есть, я получу сообщение « IndexError: индекс списка вне диапазона". Это связано с тем, что в «range(0, len(id))» больше записей, чем в «email», поскольку в некоторых из них отсутствует адрес электронной почты. Таким образом, похоже, что каждый столбец создается независимо.
Я надеюсь выполнить итерацию каждого ns0:Report_Entry, и если ns0:sAMAccountName отсутствует, заполнить его "N/ A», или идентификатор переменной, или что-то в этом роде.
Я пробовал использовать «если я не None, сделайте это», но это не работает, или моя логика отключена.
Если кто Если у вас есть какая-либо информация, мы будем очень признательны.
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/789 ... hild-items
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»