Отображение и сохранение содержимого фрейма данных с элементами многомерного массива - PullRequest
0 голосов
/ 22 января 2020

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

slice_sq_dim = 200
df_slice = pd.DataFrame({'Sample': str,
               'Slice_ID':int,
               'Slice_Array': [np.zeros((slice_sq_dim,slice_sq_dim))],
               'Interface_Array': [np.zeros((slice_sq_dim,slice_sq_dim))],
               'Slice_Array_Threshold': [np.zeros((slice_sq_dim,slice_sq_dim))]})

Я добавил отдельные элементы этого фрейма данных, обновляя значение каждой ячейки через ряд за итерацией. После того, как я закончил свой фрейм данных (около 200 строк), я не могу отобразить больше, чем первый ряд его содержимого. Я предполагаю, что это связано с включением многомерных массивов numpy (фрагментов изображения) в качестве компонента. Я также экспортировал эти данные в файл JSON, чтобы он мог действовать как входной файл при следующем запуске. Следующий код показывает, как именно я это попробовал, а также как я заполняю свой фрейм данных.

Slices_data_file = os.path.join(os.getcwd(), "Slices_dataframe.json")
if os.path.isfile(Slices_data_file): 
    print("Using the saved data of slices from previous run..")
    df_slice = pd.read_json(Slices_data_file, orient='records') 

else:
    print("No previously saved slice data found..")
    no_of_slices = 20
    for index, row in df_files.iterrows():                  # df_files is the previous dataframe with image path details
        path = row['image_path']
        slices, slices_thresh, slices_interface = slice_image(path, slice_sq_dim, no_of_slices)
        # each of the output is a list of 20 image slices 

        for n, arr in enumerate(slices):
           indx = (indx_row - 1 ) * no_of_slices + n
           df_slice.Sample[indx] = path
           df_slice.Slice_ID[indx] = n+1
           df_slice.Slice_Array[indx] = arr
           df_slice.Interface_Array[indx] = slices_interface[n]
           df_slice.Slice_Array_Threshold[indx] = slices_thresh[n] 

    df_slice.to_json(Slices_data_file, orient='records')

Я хотел бы сделать следующее:

  • Завершить фрейм данных с возможностью добавить дополнительные столбцы скалярных значений
  • Просматривать кадр данных обычно с несколькими строками и выполнять итерации, используя такие функции, как df_slice.iterrows (), которая в настоящее время не поддерживается
  • Сохраните и повторно используйте базу данных, чтобы Избегайте повторных и трудоемких операций

Любой совет или лучшие предложения?

1 Ответ

0 голосов
/ 23 января 2020

Через некоторое время поиска я нашел несколько тем, которые помогли. pd.Series было очень уместно здесь. Кроме того, я думаю, что был «SettingwithCopyWarning», который я решил игнорировать где-то посередине. Окончательный код указан ниже:

Slices_data_file = os.path.join(os.getcwd(), "Slices_dataframe.json")

if os.path.isfile(Slices_data_file): 
    print("Using the saved data of slices from previous run..)")
    df_slice = pd.read_json(Slices_data_file, orient = 'columns')            

else:
    print("No previously saved slice data found..")

    Sample_col = []
    Slice_ID_col = []
    Slice_Array_col = []
    Interface_Array_col = []
    Slice_Array_Threshold_col = []
    no_of_slices = 20
    slice_sq_dim = 200

    df_slice = pd.DataFrame({'Sample': str,
               'Slice_ID':int,
               'Slice_Array': [],
               'Interface_Array': [],
               'Slice_Array_Threshold': []})

    for index, row in df_files.iterrows():
        path = row['image_path']
        slices, slices_thresh, slices_interface = slice_image(path, slice_sq_dim, no_of_slices)

        for n, arr in enumerate(slices):
            Sample_col.append(Image_Unique_ID)
            Slice_ID_col.append(n+1)
            Slice_Array_col.append(arr)
            Interface_Array_col.append(slices_interface[n])
            Slice_Array_Threshold_col.append(slices_thresh[n])

        print("Sicing -> ", Image_Unique_ID, " Complete")

df_slice['Sample'] = pd.Series(Sample_col)
df_slice['Slice_ID'] = pd.Series(Slice_ID_col)
df_slice['Slice_Array'] = pd.Series(Slice_Array_col)
df_slice['Interface_Array'] = pd.Series(Interface_Array_col)
df_slice['Slice_Array_Threshold'] = pd.Series(Slice_Array_Threshold_col)

df_slice.to_json(os.path.join(os.getcwd(), "Slices_dataframe.json"), orient='columns')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...