Запись Frame в excel

Рейтинг: 0Ответов: 2Опубликовано: 31.01.2023

Помогите пожалуйста.

При написании парсера выявил у себя ошибку, в целом запись фрэйма в excel затирается последней записью.

Весь код скидывать нет смысла, нашел место где этот косяк вылазит.

Сам код, где ошибка:

import pandas as pd

excel_file = r'F:\Python\url\excel\1.xlsx'
excel_file_1 = r'F:\Python\url\excel\2.xlsx'

wb = pd.read_excel(excel_file,'Лист1')
df = (pd.DataFrame(wb)).values.tolist()



for i in df: 
    
    d = ''.join(i)

    dfa = {'КН':d}
    page = pd.concat([pd.DataFrame(columns = []), pd.DataFrame.from_records([dfa])], ignore_index=False)
    print(page)
with pd.ExcelWriter(excel_file_1, engine='openpyxl', mode = 'w') as writer:
    page.to_excel(writer, sheet_name='КН', index=True)

в таблице 1 имеются записи в столбце A кадастровые номера (КН), к примеру 52:01:0100051:10 и 52:01:0100051:18. Эти 2 КН превращаем в список

df = (pd.DataFrame(wb)).values.tolist()

Далее, хочу каждый КН обработать в отдельности. Предположительно вот так (может быть и ошибаюсь)

for i in df: 
    
    d = ''.join(i)

Переменная d подставляется в ссылку и данные по двум КН приходят через print, но запись в фрэйм затирается последней записью.

И потом хочу записать каждый КН в отдельную строку excel, в таблицу 2. Но ни чего не выходит.

Помогите пожалуйста))

Ответы

▲ 0Принят

Получилось через модули openpyxl и pandas. Нашел в документации по модулям. Получились новые косяки, но это другая история))

import openpyxl
from openpyxl.utils.dataframe import dataframe_to_rows
import pandas as pd
excel_file = r'F:\Python\url\excel\1.xlsx'
excel_file_1 = r'F:\Python\url\excel\2.xlsx'

wb_obj = openpyxl.load_workbook(excel_file) 

sheet_obj = wb_obj.active

row = sheet_obj.max_row
column = sheet_obj.max_column
  
wb = openpyxl.load_workbook(excel_file_1)
sheet = wb.active


for i in range(2, row + 1):
    cell = (sheet_obj.cell(row = i, column = 1).value)
    
    data = {'Кадастровый номер объекта':cell,}
    page = pd.concat([pd.DataFrame(columns = []), pd.DataFrame.from_records([data])], ignore_index=True)
    for r in dataframe_to_rows(page, index=False, header=False):
        sheet.append(r)

wb.save(excel_file_1)

▲ 0

Для того, чтобы записывать каждый КН в отдельную строку Excel, нужно в цикле for создавать новый фрейм и записывать его каждый раз в новый файл. В вашем случае, фрейм page создается вне цикла, что приводит к перезаписи данных.

import pandas as pd

excel_file = r'F:\Python\url\excel\1.xlsx'
excel_file_1 = r'F:\Python\url\excel\2.xlsx'

wb = pd.read_excel(excel_file,'Лист1')
df = (pd.DataFrame(wb)).values.tolist()

with pd.ExcelWriter(excel_file_1, engine='openpyxl', mode = 'w') as writer:
    for i in df:
        d = ''.join(i)
        dfa = {'КН':d}
        page = pd.concat([pd.DataFrame(columns = []), pd.DataFrame.from_records([dfa])], ignore_index=False)
        page.to_excel(writer, sheet_name='КН', index=True, startrow=writer.sheets['КН'].max_row, header=False)