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

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

19.10.2024, 14:31. Показов 4634. Ответов 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,317
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,317
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,317
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,317
01.12.2024, 06:36
greker1,
Можешь подсказать, как переделать с xlsxwriter?
Нет, с форматированием через xlsxwriter и openpyxl не работал
0
115 / 100 / 15
Регистрация: 24.07.2019
Сообщений: 313
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
Сообщений: 313
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,317
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,317
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
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru