3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70

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

19.10.2024, 14:31. Показов 4680. Ответов 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
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
19.10.2024, 18:48
greker1,
Python
1
2
3
4
5
6
7
8
9
10
import pandas as pd
 
df1 = pd.DataFrame({'A': ['a “a”', 'b “b”', 'c “c”'], 'B': [1, 2, 3], 'C': [4, 5, 6]})
df2 = pd.DataFrame({'A': ['b b', 'c c', 'a a'], 'B': [8, 9, 10], 'C': [11, 12, 13], 'D': [14, 15, 16]})
 
#df1.A = df1.A.str.replace(' ', ' "') + '"'
df2.A = df2.A.str.replace(' ', ' "') + '"'
 
merged_df = pd.merge(df1, df2, on='A')
merged_df
1
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
22.10.2024, 14:47  [ТС]
Gdez, помогло с первым пунктом, спасибо)))

Теперь бы ещё со вторым пунктом разобраться))
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
22.10.2024, 15:23
greker1, 9-я строчка
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
22.10.2024, 19:34  [ТС]
Gdez, виноват, не разглядел (((
Спасибо, частично помогло))
Теперь бьюсь над проблемой,: таких таблиц 4, надо запихнуть в одну. Проблема в том, что у них не везде совпадает ключ А (((
Кавычки встают отлично, а вот связать таблицы не получается , нет одинакового ключа ((
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
22.10.2024, 23:51  [ТС]
Gdez, Коряво изъясняюсь(((
Вложил файл как пример, что хочу сделать. Отделы - это как раз добавление кавычек, чтобы всё было в одном виде. Первые 4 листа - таблица, на пятом листе - что должно получиться (мой второй вопрос).
У меня код сейчас нормально объединяет таблицы 1+3 и 2+4, а вот соединить их вместе никак не получается(((
Ошибку сейчас точно не воспроизведу, но ссылается на первые ячейки первых столбцов (где Отделы, пустая ячейка, Отделлыыыыы) - вроде как не находит совпадающие значения (merged_df = pd.merge(df1, df2, on='A') - A не находит)
Вложения
Тип файла: xlsx Таблицы.xlsx (14.8 Кб, 6 просмотров)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
23.10.2024, 06:13
greker1, для
У меня код сейчас нормально объединяет таблицы 1+3 и 2+4, а вот соединить их вместе никак не получается(((
Python
1
2
3
…
concated_df = pd.concat([df13, df24], axis=0)
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
24.10.2024, 19:38  [ТС]
Gdez, не, ре получается (((
Ругается на количество столбцов в новой таблице, хотя оно правильное. При этом почему-то сваливает всё в кучу, вместо 26 столбцов пытается записать 52 (((
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
24.10.2024, 20:30
greker1, Скачал Ваш файл. На «Лист2» убрал Столбец23 и Столбец24 (их нет на Лист4).
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
import pandas as pd
 
df1 = pd.read_excel(r'/content/drive/MyDrive/fil.xlsx',
                    sheet_name='Лист1', usecols="A, C:K",
                    nrows=5, skiprows=1)
df2 = pd.read_excel(r'/content/drive/MyDrive/fil.xlsx',
                    sheet_name='Лист2', usecols="A,C:O",
                    nrows=5, skiprows=1)
df3 = pd.read_excel(r'/content/drive/MyDrive/fil.xlsx',
                    sheet_name='Лист3', usecols="A, C:K",
                    nrows=9, skiprows=1)
df4 = pd.read_excel(r'/content/drive/MyDrive/fil.xlsx',
                    sheet_name='Лист4', usecols="A,C:O",
                    nrows=9, skiprows=1)
df1.rename(columns={df1.columns[0]: 'Отделы'}, inplace=True)
df2.rename(columns={df2.columns[0]: 'Отделы'}, inplace=True)
df3.rename(columns={df3.columns[0]: 'Отделы'}, inplace=True)
df4.rename(columns={df4.columns[0]: 'Отделы'}, inplace=True)
################################################################
 
df12 = pd.merge(df1, df2, on=df1.columns[0])
df34 = pd.merge(df3, df4, on=df3.columns[0])
concated_df = pd.concat([df12, df34], axis=0)
concated_df
Получилось, за исключением Столбец23 и Столбец24, как на «Что должно получиться»
1
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
24.10.2024, 21:08  [ТС]
Gdez, столбцы 23 и 24 нужны в итоговой таблице(
Я пока попробовал по-другому немного: добавил в итоговую таблицу данные из 1 и 3 таблиц, теперь думаю, как подтянуть к ним данные из 2 и 4 таблиц. Завтра ещё буду пробовать Ваш вариант))
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
24.10.2024, 21:37
greker1, убрал столбцы по банальной причине - на айпаде с Гугл таблицами неудобно работать - на одном листе есть Столбец22, но нет Столбец23…
А идея в общем проста - в начале объединяем по общим столбцам, затем объединяем индексы. Можно наоборот
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
26.10.2024, 22:25  [ТС]
Gdez, попробовал, не получилось ((( Всё время ругался либо на имена столбцов при добавлении в таблицу из df (не находил таких), либо общее количество столбцов при добавлении в таблицу не соответствовало ((( Ещё получался вариант, когда первые 9 столбцов почему-то просто удалялись из таблицы, хотя она создана заранее отдельным куском кода.
Попробовал топорно: четыре раза повторил блоки "for index, row in df2.iterrows():..." с разными df. Подгружает в таблицу, но в дурацком порядке (в файле лист "Что получается": где ячейки пустые, там NULL).
Вложения
Тип файла: xlsx Таблицы.xlsx (17.6 Кб, 6 просмотров)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
26.10.2024, 23:17
greker1, Ну не знаю - я делал по Вашему файлу - всё вышло, как нужно
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
27.10.2024, 00:25  [ТС]
Gdez, а возможно каким-нибудь способом объединить получившуюся у меня таблицу в нечто удобоваримое?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
27.10.2024, 18:17
greker1, Есть возможность выложить все реальные наименования столбцов и все значения первого столбца последовательно для всех листов?
Остальные значения, я правильно понял, - числа?
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
27.10.2024, 20:11  [ТС]
Gdez, Текстовые значения - наименования строк (первый столбец) и столбцов.
Реальные наименования выложить не могу, рабочие таблицы)

Добавлено через 33 минуты
Gdez, Кавычки нужны были как раз в первые столбцы исходных таблиц. Спасибо, код помог, кавычки везде добавились)
У меня получалось объединить 1 с 3 и 2 с 4 таблицы в две отдельные в базе. Но, мне кажется, с ними ковыряться в дальнейшем будет не совсем удобно, поэтому пытаюсь их объединить в одну общую. Тем паче, что вообще там ещё десяток таблиц с данными будет участвовать.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
27.10.2024, 21:20
greker1, может тогда лучше в сторону SQL посмотреть?
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
27.10.2024, 21:32  [ТС]
Gdez, боюсь, через SQL - делать там запросы многокилометровые будут, чтобы всё переварить((
0
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
28.10.2024, 19:16  [ТС]
Кажется, нашёл способ всё объединить, вечером напишу, получилось или нет

Добавлено через 3 часа 4 минуты
Gdez, получилось! Сначала я через rename(columns) переименовал первые столбцы на "Отделы", затем объединил в два df первую со второй таблицами и третью с четвёртой. Потом уже эти два блока закинул в итоговую таблицу.
Спасибо за помощь)))
1
3 / 3 / 0
Регистрация: 25.06.2018
Сообщений: 70
29.10.2024, 23:09  [ТС]
Gdez, доброго вечера)
Возможно ли "выдернуть" при загрузке данных из excel а базу.db числа из значений вида "авбрпп пророт 978 рроп"? Значения такого вида, но из них нужны только сами числа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.10.2024, 23:09
Помогаю со студенческими работами здесь

Переименование таблицы в базе данных (или добавление таблиц в базу данных с именами таблиц из переменной)
С помощью панды из двоичного файла получил таблицу типа 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,но не могу разобраться с подключениями,может ли кто подсказать...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru