Nano Hash - криптовалюты, майнинг, программирование

Как удалить строки, которые удовлетворяют некоторым критериям в электронной таблице Excel?

Я хотел бы создать «уменьшенную» версию электронной таблицы Excel (xlsx) (т.е. удалив некоторые строки в соответствии с некоторым критерием), и я хотел бы знать, можно ли это сделать с помощью openpyxl.

В (питоновском) псевдокоде то, что я хочу сделать, будет выглядеть примерно так:

wb = openpyxl.reader.excel.load_workbook('/path/to/workbook.xlsx')
sh = wb.get_sheet_by_name('someworksheet')

# weed out the rows of sh according to somecriterion
sh.rows[:] = [r for r in sh.rows if somecriterion(r)]

# save the workbook, with the weeded-out sheet
wb.save('/path/to/workbook_reduced.xlsx')

Можно ли сделать что-то подобное с openpyxl, и если да, то как?

15.02.2013

Ответы:


1

Обновление 2018 года: сегодня я искал, как удалить строку, и обнаружил, что эта функция добавлена ​​в openpyxl 2.5.0-b2. Только что попробовал, и это сработало отлично. Вот ссылка, по которой я нашел ответ: https://bitbucket.org/openpyxl/openpyxl/issues/964/delete_rows-does-not-work-on-deleting

А вот синтаксис для удаления одной строки:

ws.delete_rows(index, 1)

где: «ws» — рабочий лист, «index» — номер строки, а «1» — количество удаляемых строк.

Также есть возможность удалять столбцы, но я этого не пробовал.

19.03.2018
  • Имейте в виду, что delete_rows() на самом деле перемещает строки ниже вверх. Это означает, что после удаления строки все остальные строки под ней будут иметь другой номер строки. Так что помните об этом, перебирая все строки. 23.11.2018

  • 2

    Внутренне openpyxl, похоже, не имеет понятия «строки», он работает с ячейками и отслеживает размеры, и если вы используете Worksheet.rows он вычисляет из этого двумерный массив ячеек. Вы можете изменить массив, но это не изменит рабочий лист.

    Если вы хотите сделать это на рабочем листе, вам нужно скопировать значения из старой позиции в новую позицию и установить значение ячеек, которые больше не нужны, на '' или None и вызвать Worksheet.garbage_collect().

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

    Самым элегантным решением, ИМХО, было бы расширение Worksheet или подкласса методом delete_rows. Я бы реализовал такой метод, изменив координаты его Cells на месте. Но это может сломаться, если openpyxl изменится внутреннее устройство.

    19.03.2013
  • Установка значений ячеек в '' или None не удаляет их, а тем более всю строку. 21.07.2015
  • Но вызов garbage_collect удалит конечные пустые строки. 02.08.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..