Задать вопрос
@os1111

Объединение таблиц dataFrame в цикле python ,как?

for i in range(1,N):
    #Прочитываем в формате xml и записываем в файл, чтобы потом его распарсить
    with client.settings(raw_response = True):
        w = client.service.GetCompanyStructure({'Inn' : INN[i]})
    #print(q.text)
    g = open('Result_inn1.xml', 'w', encoding="utf-8")
    g.write(w.text)
    g.close
    docx = etree.parse(r'Result_inn1.xml')
    # корневой элемент
    root = docx.getroot()
    # получаем глубину вложенности для каждого элемента 
    def depth_iter(docx,tag=None,number=None,text=None):
        stack = []#список
        stack.append(iter([root]))
        while stack:
            e = next(stack[-1], None)
            if e == None:
                stack.pop()
            else:
                stack.append(iter(e))
                if tag == None or e.tag == tag:
                    yield (e,e.tag, stack.__len__()-1,e.text)

    #запускаем итератор
    a= depth_iter(docx)
    st=[]
    b=0
    for i in a:
        st.append([])
        #st[b,0]=str(i[0])
        #st[b,1]=str(i[1])
        st[b].append(i[0])
        st[b].append(i[1])
        st[b].append(i[2])
        st[b].append(i[3])
        b=b+1
    for q in range(0,len(my_tables)):
        i=0
        number_of_table=0 #счетчик таблиц с названием table_name и заданной глубиной
        column=[]
        #находим все названия полей таблицы и записываем в массив
        while i<len(st):
            fulltag=st[i][1]
            obj=fulltag.split('}')
            depth=st[i][2]
            if obj[1] == my_tables[q] and depth == table_depth:
                number_of_table+=1
                #print('Table name:\n',obj[1],'\nFields:')
                a=i+1
                if (a+1) == len(st):
                    break
                while (st[a][2] > (table_depth)) and (a < (len(st))):
                    while (st[a][2] == (table_depth+1)):  
                        fulltag=st[a][1]
                        obj=fulltag.split('}')
                        d=0
                        for b in range(len(column)):
                            if obj[1] != column[d]:
                                d+=1
                        if d == len(column):
                            column.append(obj[1])
                        #attr.append(st[a][3])
                        #print(obj[1],':',st[a][3])
                        if (a+1) == len(st):
                            break
                        a=a+1
                    if (a+1) == len(st):
                        break
                    a=a+1
                    #attr.append(st[a][3])
            i+=1
        #print(column)
        #print(len(column))
        #print(number_of_table)
        #Заполняем массив данных NULL
        atribute = [['NULL' for x in range(len(column))] for y in range(number_of_table)]
        #print(atribute)
        number_of_cells=0
        for i in range(len(st)):
            fulltag=st[i][1]
            obj=fulltag.split('}')
            depth=st[i][2]
            if obj[1] == my_tables[q] and depth == table_depth:
                a=i+1
                if (a+1) == len(st):
                    break
                while (st[a][2] > (table_depth)) and (a < (len(st))):
                    while (st[a][2] == (table_depth+1)):
                        fulltag=st[a][1]
                        obj=fulltag.split('}')
                        d=0
                        for b in range(len(column)):
                            if obj[1] == column[d]:
                                atribute[number_of_cells-1][d]=st[a][3]            
                            d+=1
                        if (a+1) == len(st):
                            break
                        a+=1
                    if (a+1) == len(st):
                        break
                    a+=1
                    if (number_of_cells) == number_of_table:
                        break
                    number_of_cells+=1

        df = pd.DataFrame(columns = column, data = atribute)
        df[q]=pd.concat([df_[q],df], ignore_index=True)

Скрипт который создает q таблиц в цикле и записывает их в массив. Я хочу чтобы соответсвующие таблицы сразу объединялись, но у меня не получается
хочу чтобы суть была такая: df[q]=pd.concat([df_[q],df], ignore_index=True)
Но это не работает.
Подскажите что делать, пожалуйста
  • Вопрос задан
  • 594 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы