Как сохранить данные заголовка файла DICOM в кадре данных pandas? - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь читать файлы DICOM, используя pydicom в Python, и хочу сохранить данные заголовка в кадре данных pandas.Как извлечь значение элемента данных для этой цели?

До сих пор я создал фрейм данных со столбцами в качестве имен тегов в файле DICOM.Я получил доступ к элементу данных, но мне нужно только сохранить значение элемента данных, а не всю последовательность.Для этого я преобразовал последовательность в строку и попытался разбить ее.Но это также не сработает, так как длина разных тегов различна.

refDs = dicom.dcmread('000000.dcm')
    info_header = refDs.dir()

    df = pd.DataFrame(columns = info_header)
    print(df)

    info_data = []
    for i in info_header:
        if (i in refDs):
            info_data.append(str(refDs.data_element(i)).split(" ")[0])

    print (info_data[0],len(info_data))

Я поместил элемент последовательности элемента данных в список, так как не смог напрямую поместить его в кадр данных.Вывод приведенного выше кода:

(0008, 0050) Accession Number                    SH: '1091888302507299' 89

Но я хочу хранить данные только в кавычках.

1 Ответ

1 голос
/ 05 июля 2019

Это работает для меня:

import pydicom as dicom
import pandas as pd

ds = dicom.read_file('path_to_file')
df = pd.DataFrame(ds.values())
df[0] = df[0].apply(lambda x: dicom.dataelem.DataElement_from_raw(x) if isinstance(x, dicom.dataelem.RawDataElement) else x)
df['name'] = df[0].apply(lambda x: x.name)
df['value'] = df[0].apply(lambda x: x.value)
df = df[['name', 'value']]

В конце концов, вы можете транспонировать его:

df = df.set_index('name').T.reset_index(drop=True)

Вложенные поля потребуют больше работы, если они вам также понадобятся.

...