Запись Frame в excel
Помогите пожалуйста.
При написании парсера выявил у себя ошибку, в целом запись фрэйма в 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. Но ни чего не выходит.
Помогите пожалуйста))
Ответы (2 шт):
Для того, чтобы записывать каждый КН в отдельную строку 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)
Получилось через модули 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)