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

Загрузить данные из Excel нестандартной структуры

10.03.2021, 13:37. Показов 2560. Ответов 11

Студворк — интернет-сервис помощи студентам
Всем привет! Нужно загрузить данные из екселя используя pandas.read_excel. Сам ексель файл представляет собой следующую структуру:
Первые несколько строчек ненужная информация , потом названия столбцов в строке, потом опять ненужная , ниже в столбце индексы, а напротив в строках данные. (Схематическое изображение на рисунке: trash - ненужные данные которые нужно пропустить)
У меня получилось написать функцию, которая может читать ексель такого типа, но препод сказал, что файл нужно именно парсить и можно использовать магические команды, а я использую константы (например в skiprows). Я прочитала всю документацию по функции pandas.read_excel , но не нашла ничего про эти команды. Что можно сделать, чтобы читать используя магические команды и парсить? (даже если не пандас библиотека). Спасибо

Python
1
2
3
4
5
6
7
8
9
10
11
def excel_to_df(path):
 
        df = pd.ExcelFile(path).parse(sheet_name='Data',
                   skiprows=[i for i in range(0,31) if i != 10], #пропускаем ненужные строки сверху, 
                                                                                  #кроме заголовка
                   header=0,
                   usecols=[i for i in range(1,100000)], #берем все столбцы начиная с 1-го.
                                                                         # Я поставила до 100000, но там всего 100 по факту
                   index_col=0)
        
        return df
Миниатюры
Загрузить данные из Excel нестандартной структуры  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2021, 13:37
Ответы с готовыми решениями:

Не могу загрузить данные с Excel
Нашёл на сайте код, который должен работать. Подключил все библиотеки, но всё равно строка byte byteImageFromExcel =...

Загрузить данные из Excel в StringGrid
При открытие файла в StingGride появляется только первая строчка таблицы из экселя, затем вылетает ошибка: "Could not convert variant...

Как загрузить данные из Excel в массив
Добрый день! Подскажите как загрузить диапазон ячеек excel в массив VBS? Чтобы потом его можно было преобразовывать уже в скрипте....

11
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
10.03.2021, 14:28
Ну если нестандартная структура - пандас будет только зря мучиться. Можно, наверное, считать им в 2d-dataframe, но потом вручную доводить до кондиции.
0
0 / 0 / 0
Регистрация: 10.03.2021
Сообщений: 24
10.03.2021, 14:33  [ТС]
а можно ли здесь использовать магические команды? что подразумевается под "вручную доводить до кондиции". Просто препод сказал что все это можно через 1 функцию сделать просто правильно аргументы указать
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
10.03.2021, 17:30
Maria_pythonist, насколько я знаю, maginc methods - это немного про другое.
Доводить до кондиции - pd.read_excel (или как его там) уммет читать только прямоугольные таблички. Если ваша структура не такая - ну что ж вы хотите, он не сможет, доводИте вручную.
0
0 / 0 / 0
Регистрация: 10.03.2021
Сообщений: 24
10.03.2021, 18:09  [ТС]
вот более наглядно
Миниатюры
Загрузить данные из Excel нестандартной структуры  
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
10.03.2021, 21:24
Maria_pythonist, а имена столбцов и индексы имеют что то общее и отличное от trash?

Добавлено через 3 часа 11 минут
Maria_pythonist, может не то, что нужно
Python
1
2
3
4
5
6
7
8
9
10
11
12
 
 
import pandas as pd
def excel_to_df():
    df = pd.read_excel('typical.xlsx', sheet_name = 0).dropna(1, 'all')
    df = df[df.iloc[:,-1].notna()]
    headers = df.iloc[0].tolist()
    df = df.dropna()
    index = df.iloc[:,0].tolist()
    df = pd.DataFrame(df.values[:, 1:], index = index, columns = headers[1:])
    print(df)
excel_to_df()
1
0 / 0 / 0
Регистрация: 10.03.2021
Сообщений: 24
10.03.2021, 22:14  [ТС]
Я указала trash - потому что это не нужная информация для записи в датафрейм (пустые поля или ненужные данные). А вы можете поподробнее про вашу реализацию рассказать? Я так понимаю, вы все NA заменяете на 1 а потом что?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
10.03.2021, 22:28
Maria_pythonist, 5-я строчка - оставляет все данный, убирая "пустые" столбцы справа от последнего значащего. (1 тут - столбцы)
6-я - оставляет строчки, в которых нет в последнем столбце (-1) значения NaN
7-я - список наименования столбцов
8-я - удаляет строки, содержащие NaN
9-я - список наименования индексов строк
10-я - новый фрейм со значениями из указанного диапазона старого фрейма с именами строк и столбцов
0
0 / 0 / 0
Регистрация: 10.03.2021
Сообщений: 24
10.03.2021, 22:30  [ТС]
Спасибо, теперь логика понятна! Но все равно остаются эти константы. С другой стороны, судя по всему эту задачу по другому не решить и препод врал мне когда сказал что это возможно без контант. Как думаете?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
10.03.2021, 22:33
Этот код работает только, если "верхняя" табличка "уже" значащей.
Если идентификатором значащей таблицы считается последняя перед ней пустая строка, то код другой нужен

Добавлено через 59 секунд
Maria_pythonist, констант нет - первый (первая) - из структуры массивов
0
0 / 0 / 0
Регистрация: 10.03.2021
Сообщений: 24
10.03.2021, 23:27  [ТС]
А если например представить, что у нас тот же самый ексель но строка с индексами и данными находятся на 31 строке. Тогда как изменится?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
11.03.2021, 04:11
Maria_pythonist, Никак
По идее "шаблон" выборки может еще основываться на условии, что, допустим, значения ячеек "index" и "header" имеют тип данных, отличный от "trash" и "data" (пусть даже "trash" и "data" одинаковый тип, например числа или bool).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2021, 04:11
Помогаю со студенческими работами здесь

Загрузить данные из Excel в dataset keras
Ребята, здравствуйте! Подскажите пожалуйста из-за чего часть данных из Excel могут определяться как "None"? А часть данных...

Загрузить в combobox данные с листа Excel
Прошу помочь. Есть форма в VB6 "Главная".exe, на ней combobox1 и combobox2 и textBox1, есть отдельно создана E:\БД\Данные.xls Лист1 в...

Данные из Excel файла загрузить в таблицу БД
Здравствуйте. может подскажете как одну штуку сделать: Работаю в microsoft Visual Basic 2010, подключил базу, вывел данные, вообщем всё как...

Как данные из Excel загрузить из OpenDialogFile в combobox?
Добрый день, подскажите, пожалуйста ( а лучше примером помогите), как сделать такую вещь. Есть кнопка, по которой врубается...

Загрузить данные из файла Excel в StringGrid через OpenDialog
Доброго времени суток! Нужно загрузить данные из Excel файла в StringGrid через OpenDialog. Из StringGrid в Excel получилось...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru