Я анализирую структуру данных XMI / XML в pandas фрейме данных, сначала разбив его на словарь. Когда я сталкиваюсь с именованным кортежем в списке в моем XMI, в моем списке появляется максимум два именованных кортежа (хотя у большинства есть только один).
Для обработки этого случая я делаю следующее:
if val is not None and val:
if len(val) == 1:
d['modifiedBegin'] = val[0].begin
d['modifiedEnd'] = val[0].end
d['modifiedBegin1'] = None
d['modifiedEnd1'] = None
else:
d['modifiedBegin1'] = val[1].begin
d['modifiedEnd1'] = val[1].end
Мои проблемы с этим: а) я не могу быть уверен, что в моем списке есть только два списка, которые я разлагаю, и б) это кажется дешевым, уродливым и просто неправильным!
Я действительно хотел бы предложить более общее решение, особенно с учетом пункта а) выше.
Мои данные выглядят так:
val = [Span(xmiID=105682, begin=13352, end=13358, type='org.metamap.uima.ts.Span'), Span(xmiID=105685, begin=13368, end=13374, type='org.metamap.uima.ts.Span')]
Я бы очень хотел вместо этого разбейте это на две отдельные строки в моем фрейме данных, вместо того, чтобы иметь больше столбцов. Основная проблема заключается в том, что оба этих кортежа совместно используют общие данные от более крупного объекта, который выглядит следующим образом:
Negation(xmiID=142613, id=None, negType='nega', negTrigger='without', modifier=[Span(xmiID=105682, begin=13352, end=13358, type='org.metamap.uima.ts.Span'), Span(xmiID=105685, begin=13368, end=13374, type='org.metamap.uima.ts.Span')])
Итак, обе строки имеют атрибуты negType
и negTrigger
... что более важно общий способ разложить это, чтобы вставить в мой dataframe. Хотя я итерировал элементы, когда длина списка была больше единицы, а затем вставлял их в кадр данных на каждой итерации, но это выглядит грязно.
Таким образом, мой желаемый результат - иметь кадр данных, который выглядит лайк (минус индексы и прочее общее барахло):
![enter image description here](https://i.stack.imgur.com/41NYM.png)