У меня есть набор данных XML, который сконструирован так:
<DataSet>
<Record><!-- each DataSet can have zero to many Record tags -->
<Identifier><!-- each Record will definitely have exactly one Identifier tag -->
<MRN value="MRN"></MRN><!-- Each Identifier will have zero or at the most one MRN tag, with alphanumeric character as the patient's MRN in value attribute -->
</Identifier>
<Medication><!-- each Record will definitely have exactly one Medication tag -->
<Item value="CUI"></Item><!-- Each Medication will have zero to many Item tags, with alphanumeric character as the Medication CUI in the value attribute -->
</Medication>
</Record>
</DataSet>
И я хочу экспортировать список уникальных пар значений MRN / значений CUI в файл CSV. Конечный файл CSV будет выглядеть примерно так: два столбца:
![enter image description here](https://i.stack.imgur.com/Q3yeE.jpg)
Если у MRN более одного CUI, то я хочу, чтобы значение MRN повторялось в первом столбце для каждого CUI. Кроме того, мне не нужны пустые значения, то есть я не хочу извлекать MRN, которые не имеют CUI или наоборот.
Я пытался работать со списками и словарями, но проблема в том, что я не могу получить конечный вывод, чтобы он выглядел так, как я хочу, с повторением значения MRN для каждого CUI. Я даже создал фрейм данных, чтобы увидеть, какой CUI принадлежит какому MRN, но, опять же, это не тот вывод, который я хочу. Вот код, который я использовал:
import pandas as pd
import xml.etree.ElementTree as ET
tree = ET.parse('/med/dataset.xml')
root = tree.getroot()
mrn = []
cui = []
for element in root:
for item in element[0::2]:
d=[]
mrn.append(d)
for child in item:
d.append(child.attrib['value'])
for item in element[1::2]:
d=[]
cui.append(d)
for child in item:
d.append(child.attrib['value'])
new_list = [a + b for a,b in zip(mrn, cui)]
print(new_list)
df = pd.DataFrame(new_list)
print(df)
Я хочу сделать это, используя только стандартные библиотеки Python (pandas, numpy, xml.etree.ElementTree и csv).
Есть идеи?