Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70

Добавление данных из таблицы xlsx в базу .db с форматированием

19.10.2024, 14:31. Показов 5194. Ответов 59

Студворк — интернет-сервис помощи студентам
Добрый день.
Пытаюсь добавить данные для их обработки из нескольких файлов xlsx в одну созданную базу baza.db с помощью питона версии 3.9.7 (пакет Anaconda + jupyter notebook).

Есть код, создающий две таблицы:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import sqlite3
import pyodbc
import pandas as pd
from datetime import datetime, timedelta, date
import time
import openpyxl
from openpyxl.utils.dataframe import dataframe_to_rows
import csv
with sqlite3.connect(r'путь \baza.db') as conn:
    cursor = conn.cursor()
    # Открытие файла Excel и чтение данных
    df1 = pd.read_excel(r'путь \файл1.xlsx', sheet_name='Лист1', usecols="A:J", nrows=4)
    df2 = pd.read_excel(r'путь \файл1.xlsx', sheet_name='Лист2', usecols="A,C:I,K:Q,U:V", nrows=6, skiprows=1)
    for index, row in df1.iterrows():
        values_list = [row[column] for column in df1.columns]
        insert_query = """
        INSERT INTO Table1 (Ст1, Ст2, Ст3, Ст4, Ст5, Ст6, Ст7, Ст8, Ст9, Ст10)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
        """
        cursor.execute(insert_query, values_list)
    conn.commit()
    for index, row in df2.iterrows():
        values_list = [row[column] for column in df2.columns]
        insert_query = """
        INSERT INTO Table2 (Ст1, Ст2, Ст3, Ст4, Ст5, Ст6, Ст7, Ст8, Ст9, Ст10, Ст11, Ст12, Ст13, Ст14, Ст15, Ст16, Ст17)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
        """
        cursor.execute(insert_query, values_list)
    conn.commit()
cursor.close()
conn.close()
print("Данные подгружены"+time.ctime())
Есть две проблемы:
1) В столбце A с листа 2 (df2) надо добавить кавычки в каждую ячейку столбца: сейчас там все значения в формате ‘АБВ Вапваупауи’, а нужен вид ‘АБВ “Вапваупауи”’. Значения текстовые, разная длина.
2) Надо запихнуть данные с обоих листов файла в одну таблицу (а не две), по сути сложенную из обеих (к Table1 подтянуть значения Table2 (столбцы: Ст2, Ст3, Ст4, Ст5, Ст6, Ст7, Ст8, Ст9, Ст10, Ст11, Ст12, Ст13, Ст14, Ст15, Ст16, Ст17), на обоих листах файла excel текстовые значения в столбцах A совпадают (спасибо кавычкам), но могут быть расположены в разном порядке.

Подскажите, как допилить, пожалуйста)))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.10.2024, 14:31
Ответы с готовыми решениями:

Добавление таблицы в базу данных
Как добавить таблицу в базу данных? Если нету ссылки добавление таблицы в базу данных SQL. Качал и устанавливал SQL Server Data Tools...

Добавление данных в базу и обновление таблицы на странице
Здравствуйте! Пишу сайт (я новичок), использую Python + Django + HTML + CSS + Bootstrap + JS + JQuery. Задача: хочу вызвать модальное...

Программное добавление таблицы в другую базу данных
Добрый день. Прошу сильно не пинать, я предварительно искал ответ - не нашел, видел только одну подобную тему и в ней не было ответов....

59
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
27.11.2024, 13:24  [ТС]
Студворк — интернет-сервис помощи студентам
Gdez, вопрос очень геморный, да?((
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
27.11.2024, 15:22
greker1, Как и любой анализ данных по нестандартным запросам (условиям)
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
27.11.2024, 18:36  [ТС]
Gdez, возникла мысль: а если сначала сделать два списка по статусам, а потом уже сравнивать время при совпадении других данных?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
27.11.2024, 19:16
greker1, вот эта строчка «делает» два списка (True, False) по статусам:
Python
1
df_tmp['tmp'] = df_tmp['Статус'].str.startswith('не')
Вот эта сравнивает время:
Python
1
ind = (df_tmp['tmp'] > df_tmp['tmp'].shift(-1)) & (df_tmp['Отдел'] == df_tmp['Отдел'].shift(-1))
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
27.11.2024, 23:10  [ТС]
Gdez, Спасибо, завтра попробую))

По первой задаче: получилось, спасибо!)))
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
29.11.2024, 23:14  [ТС]
Gdez, По второй тоже получилось, спасибо огромнейшее за помощь!)))

Попробовал по-другому: через merge сцепил нужные столбцы с обоих dataframe, а там уже отфильтровал по условию времени.

Главное, что получилось!!!
1
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
30.11.2024, 19:17  [ТС]
Добрый вечер)
Вопрос вылез(((
Пытаюсь несколько dataframe выгрузить в один файл xlsx на разные листы. Всё выгружается , но все числа в них без разрядов. При это excel их воспринимает именно как числа, тут всё в порядке. Пытаюсь привести к виду "ххх ххх ххх" и "ххх ххх ххх.хх", либо ошибки вроде со строками не работает, либо приводит внешне в нужный вид, но уже как строки(((
Не подскажете, как правильно выгрузить числа с форматом?
Спасибо!)))
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
30.11.2024, 20:17
greker1, «Напрямую» не получится
Можно с помощью xlsxwriter
https://xlsxwriter.readthedocs... andas.html
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
30.11.2024, 22:26  [ТС]
Gdez, сейчас у меня код выгрузки такой:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
workbook = openpyxl.workbook()
workbook.save('name.xlsx')
with pd.ExcelWriter('name.xlsx', engine='openpyxl', mode='a') as writer:
    df1.to_excel(writer, sheet_name='Лист1', index=False)
    df2.to_excel(writer, sheet_name='Лист2', index=False)
    df3.to_excel(writer, sheet_name='Лист3', index=False)
    df4.to_excel(writer, sheet_name='Лист4', index=False)
    df5.to_excel(writer, sheet_name='Лист5', index=False)
    df6.to_excel(writer, sheet_name='Лист6', index=False)
    df7.to_excel(writer, sheet_name='Лист7', index=False)
    df8.to_excel(writer, sheet_name='Лист8', index=False)
workbook = openpyxl.load_workbook('name.xlsx')
workbook.remove(workbook['Sheet']   # удаление лишнего листа, который создаётся при создании пустого файла
Дальше преобразование ширины столбцов через цикл for по листам файла, фиксация первых строк с "шапками" и фильтры для удобства работой.

Можешь подсказать, как переделать с xlsxwriter?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
01.12.2024, 06:36
greker1,
Можешь подсказать, как переделать с xlsxwriter?
Нет, с форматированием через xlsxwriter и openpyxl не работал
0
115 / 100 / 15
Регистрация: 24.07.2019
Сообщений: 322
01.12.2024, 09:29
цикл по ячейкам и
Python
1
cell.number_format = '0.00' # '@', 'dd.mm.yyyy', '0.00', '0', '# ##0', 'General'
а вообще есть ведь хорошая документация
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
01.12.2024, 13:48  [ТС]
nilske, Ещё бы понимать, где что искать(( А так да, документация штука хорошая, согласен)

Цитата Сообщение от nilske Посмотреть сообщение
цикл по ячейкам и
PythonВыделить код
1
cell.number_format = '0.00' # '@', 'dd.mm.yyyy', '0.00', '0', '# ##0', 'General'
А можно конкретный пример, пожалуйста?))
0
115 / 100 / 15
Регистрация: 24.07.2019
Сообщений: 322
01.12.2024, 19:45
https://openpyxl.readthedocs.i... er-formats
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
03.12.2024, 22:11  [ТС]
Получилось в итоге так:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from openpyxl import load_workbook
 
# Загрузка рабочей книги Excel
wb = load_workbook(filename="файл.xlsx")
 
# Перебор всех листов в книге
for ws in wb.worksheets:
    # Перебор всех строк на текущем листе
    for row in ws.iter_rows():
        # Перебор всех ячеек в текущей строке
        for cell in row:
            # Преобразуем значение ячейки в число, если возможно
            try:
                value = float(cell.value)
            except (ValueError, TypeError):
                continue  # Пропускаем ячейку, если не удается преобразовать значение в число
            
            # Проверяем значение ячейки
            if value < 1:
                cell.number_format = '### ### ##0.00'
            else:
                cell.number_format = '### ### ###'
 
# Сохранение изменений в той же книге
wb.save('файл.xlsx')
Спасибо за помощь)
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
04.12.2024, 22:58  [ТС]
Добрый вечер, возник вопрос((

Есть таблица excel с данными (файл вложен, лист "Что есть").

Подскажите, пожалуйста, как с помощью python сделать сортировку по нескольким столбцам сразу:
Отдел, Сотрудник и Должность - от А до Я (текстовые поля), Зп - по возрастанию (числовое поле).
Пример результата - на листе "Что должно получиться".

В самой "задачке" в файле 7 листов, данные разные, надо сделать такие сортировки на всех листах, но по разным столбцам((

Спасибо!)))
Вложения
Тип файла: xlsx Сортировочная.xlsx (24.5 Кб, 2 просмотров)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
05.12.2024, 06:18
greker1, https://docs-python.ru/package... ort-index/
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
05.12.2024, 13:31  [ТС]
Gdez, получилось, спасибо)))
Пришлось поискать место в коде, куда именно сортировку воткнуть, чтобы сработало.

Спасибо за помощь)))
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
08.12.2024, 13:53  [ТС]
Здравствуйте))

Ещё один вопрос появился: есть два dataframe (вложенный файл, Заказ и Остаток), как из них получить dataframe вида Итого? Оба dataframe собраны в базе baza.db. Данных может быть несколько сотен строк, какие-то значения могут отсутствовать в Заказе и Остатке (как пример позиция строки №9 в Заказе и Итого, выделил курсивом)

Как их правильно объединить, чтобы были показаны данные из обоих dataframe?

Спасибо!)))
Вложения
Тип файла: xlsx Сборка.xlsx (12.5 Кб, 6 просмотров)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
08.12.2024, 18:56
greker1,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd
import numpy as np
 
df1 = pd.read_excel('/content/drive/MyDrive/Сборка.xlsx', sheet_name=0, skiprows=1, usecols="A,B,C,D")
df2 = pd.read_excel('/content/drive/MyDrive/Сборка.xlsx', sheet_name=0, skiprows=1, usecols="F,G,H,I")
df2.columns = df1.columns.tolist()[:3] + [df2.columns.to_list()[-1]]
 
 
df_res = pd.merge(df1, df2, on=['Товар', 'Изд-во', 'Кол-во'], how='outer') #Само объединение
df_res.dropna(subset='Товар', inplace=True)
df_res.fillna(0, inplace=True)
df_res['Остаток  - сумма заказа'] = df_res['Остаток'] - df_res['Сумма заказа']
df_res = df_res.convert_dtypes()
df_res
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
15.12.2024, 22:43  [ТС]
Gdez, Извиняюсь за долгий ответ: пришлось заковыряться с проверкой дат, в результате треть скрипта переделывал(((
Со сборкой в итоге получилось так: к Остатку подтянул совпадения из Заказа, потом в отдельный dataframe выгрузил Заказы, которых нет в остатке (а вдруг такие появятся?), потом объединил их в один и к получившемуся уже притянул столбец Остаток из Остатка, заменив пустые значения на 0
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2024, 22:43

Переименование таблицы в базе данных (или добавление таблиц в базу данных с именами таблиц из переменной)
С помощью панды из двоичного файла получил таблицу типа DataFrame import pandas as pd df =...

Laravel 5: импорт данных из excel(xlsx) в базу
Всем доброго времени суток! Изучаю замечательный фреймворк Laravel относительно недавно (пару месяцев). Из достижений пока только блог,...

Скрипт конвертации CSV в XLSX с форматированием
Добрый день! Не много соображаю в VB.Net, но задача именно в формате отдельно исполняемого файла VBS. Задача: есть файл csv с...

Как автоматизировать импорт данных в базу mysql из xlsx файла?
Есть обновляемый файл xlsx на ftp сервере.Необходимо по расписанию импортировать его в базу mysql. подскажите как это сделать эффективно и...

Добавление записей из базу данных Access в базу данных SQL
Здравствуйте,пытаюсь добавить записи из базы данных Access в базу данных SQL,но не могу разобраться с подключениями,может ли кто подсказать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru