Проблемы с заполнением фреймов данных в dict of dicts

#python #pandas #dataframe #dictionary

#python #панды #фрейм данных #словарь

Вопрос:

У меня есть что-то вроде матрицы пустых фреймов данных.

 A = {'folder1':{'case1':pd.Dataframe(), 'case2':pd.Dataframe(),... , 'case8':pd.Dataframe()}
    {'folder2':{'case1':pd.Dataframe(), 'case2':pd.Dataframe(),... , 'case8':pd.Dataframe()}
...
    {'foldern':{'case1':pd.Dataframe(), 'case2':pd.Dataframe(),... , 'case8':pd.Dataframe()}}
 

В котором A[folder][case] находится пустой фрейм данных.

У меня уже есть другой dict of dicts непустых фреймов данных вида

 BASIS = {'folder1':{'arch01':pd.Dataframe(...), 'arch02':pd.Dataframe(...)}
    {'folder2':{'arch01':pd.Dataframe(...), 'arch02':pd.Dataframe(...)}
...
    {'foldern':{'arch01':pd.Dataframe(...), 'arch02':pd.Dataframe(...)}}
 

В котором BASIS[folder][arch] находится непустой фрейм данных с большим количеством строк, которые я хочу разделить на другие A[folder]['case'] .

Например, BASIS[folder]['arch01'] будет разделен на A[folder]['case1'] A[folder]['case2'] A[folder]['case3']

По сути, я хочу разделить [arch] ['casei'] , ['casej'] где «i» и «j» — это случаи, когда возникают некоторые условия

Я пытаюсь присвоить значения этим фреймам данных таким образом:

 for folder in ['folder1', 'folder2',... 'foldern']:
    
    IRLB = BASIS[folder]["arch01"].copy()
    condition01 = IRLB.loc[(IRLB['Column3'].str.contains('AAA',case=False))]
    A[folder]['case1'] = A[folder]['case1'].append(condition01)
    
    condition02 = IRLB.loc[(IRLB['Column3'].str.contains('BBB',case=False))]
    A[folder]['case2'] = A[folder]['case2'].append(condition02)        
    ... (and other conditions to others cases of A)
 

Я получаю следующую ошибку:
Заполняется только последняя папка A, остальные все еще пустые фреймы данных.

Комментарии:

1. Я уже пробовал[folder][‘case1’] = condition01 Что происходит, так это то, что последняя [папка] содержит только condition01 для последнего foder. Когда я использую приведенный выше код, [папка] также содержит условие01 для всей предыдущей папки

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

Ответ №1:

Я нашел ошибку. Приношу извинения всем, кто потерял время на ее чтение. Проблема заключалась в следующем: поскольку мой язык португальский, иногда я перебираю папки на португальском языке, как «pasta», я перебирал «folder» и использовал «pasta», поскольку мое последнее значение pasta было относительно последней папки (pasta = ‘foldern’ вне цикла), я использовал всегда последняя папка, а не повторяющаяся папка (‘folder1’, ‘folder2’, n …). Надеюсь, этот пост кому-нибудь поможет, Спасибо