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

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

10.03.2021, 13:37. Показов 2472. Ответов 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
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 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
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 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
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
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
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
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
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
10.03.2021, 22:33
Этот код работает только, если "верхняя" табличка "уже" значащей.
Если идентификатором значащей таблицы считается последняя перед ней пустая строка, то код другой нужен

Добавлено через 59 секунд
Maria_pythonist, констант нет - первый (первая) - из структуры массивов
0
0 / 0 / 0
Регистрация: 10.03.2021
Сообщений: 24
10.03.2021, 23:27  [ТС]
А если например представить, что у нас тот же самый ексель но строка с индексами и данными находятся на 31 строке. Тогда как изменится?
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru