Преобразование данных панд в массив - PullRequest
0 голосов
/ 31 октября 2018

Панды начинающий здесь. У меня есть файл .CSV, который я открыл с помощью Pandas. Формат файла следующий: -

PatientId    x    y    width    height    target
A12kxk       23   45   10       20        1
Aldkd2       92   22   12       30        1
Aldkd2       29   11   98       34        1
Alll34                 0

Я хочу получить словарь с PatientId в качестве ключа, и значение будет представлять собой двумерный массив, содержащий x, y, ширину, высоту одной строки для одного пациента и различные строки, сложенные так: -

Словарь ["Aldkd2"] = 92 22 12 30 29 11 98 34

Я хочу сбросить те, у которых 0 в качестве цели. В таблице один или несколько строк для одного пациента. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Используя Pandas, вы можете читать данные в кадре данных Pandas следующим образом:

import pandas as pd
df = pd.read_csv('data.csv')

В этот момент параметр значения dataframes содержит данные таблицы. Вы можете перебирать эти данные для извлечения и создания словаря, который вы ищете. Что-то вроде:

patient_info_dict = {}
for row in df.values:
    # At this point, the first value in 'row' is your dictionary key.

    # Check if the patient id is already a key in the dictionary
    if row[0] not in patient_info_dict:
        # Initialize an empty array
        patient_info_dict[row[0]] = []

        # Append the remaining data except for the key and the last value
        patient_info_dict[row[0]].append(row[1:-1])

    # If the patient id is already a key in the dictionary:
    else:
        # Append the remaining data except for the key and the last value
        patient_info_dict[row[0]].append(row[1:-1])

Если вы печатаете словарь с:

print(patient_info_dict)

Вы получите следующий вывод:

{'A12kxk': [array([23, 45, 10, 20], dtype=object)], 'Aldkd2': [array([92, 22, 12, 39], dtype=object), array([29, 11, 98, 34], dtype=object)]}

Другой ответ определенно более питоничен и, вероятно, более эффективен. Однако, если вы новичок в Python / Pandas, это может быть полезно для понимания того, что именно происходит.

0 голосов
/ 31 октября 2018

Я надеюсь, что это решит вашу проблему,

dic= df.groupby('PatientId').apply(lambda x:x[['x','y','width','height']].values.tolist()).to_dict()

Выход:

{'Aldkd2': [[92.0, 22.0, 12.0, 30.0], [29.0, 11.0, 98.0, 34.0]], 'Alll34': [[nan, 0.0, nan, nan]], 'A12kxk': [[23.0, 45.0, 10.0, 20.0]]}

Теперь вы можете, как хотите,

print dic['Aldkd2']

Выход:

[[92.0, 22.0, 12.0, 30.0], [29.0, 11.0, 98.0, 34.0]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...