python - 如何将 DICOM 文件的 header 数据存储在 Pandas 数据框中?

标签 python python-3.x pandas dicom pydicom

我正在尝试在 Python 中使用 pydicom 读取 DICOM 文件,并希望将 header 数据存储到 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

但我只想将数据存储在引号内。

最佳答案

这对我有用:

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)

如果您也需要嵌套字段,则需要做更多的工作。

关于python - 如何将 DICOM 文件的 header 数据存储在 Pandas 数据框中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56601525/

相关文章:

Python 列表索引多个范围

python-3.x - Luigi 编程配置

python - “numpy.ndarray”对象没有属性 'columns'

Python C 绑定(bind)错误

python - 将多个视频文件中的抓取帧追加到列表列表中

python - 是否有 `difflib.get_close_matches()` 的替代方法返回索引(列表位置)而不是 str 列表?

python - 使用 df.itertuples() 中的元组,如何在条件下检索每个元组元素的列值?

python - 更改 DateTimeIndex 的日期

python - np.where 代码 - ValueError : "cannot set items on DatetimeIndexResampler"

python - 在没有 ODBC 的情况下将 Python 连接到 SQL Server