Ответы пользователя по тегу Excel
  • Как привести формат ФИО к одному значению?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Если это задача объемная и/или регулярная, попробуйте NLP-фреймворк natasha. Я его использовал, он хорошо распознает бОльшую часть фамилий, имен и отчеств. Правда, сам фреймворк очень развесистый и обращение с ним довольно непростое. Но работает неплохо.
    Ответ написан
    Комментировать
  • Есть ли программа, сервис, модуль для Excel, Calc для копирования из электронной таблицы в SQL?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Knime.
    Бесплатно. Есть русское комьюнити. Есть интерфейсы к почти любым sql и nosql бд. Открывает и пишет xlsx, csv, всё вот это вот. Можешь делать с «колонками и строчками» что угодно.
    Есть куча аналолитических модулей, логика, циклы и всё такое. Есть возможность создавать вставки на java, js, python и т.п. Можно поднять сервак и выполнять удаленно. Можно десктоп приложение.

    Только надо влиться в процесс. Там несколько нетривиально всё, я например с третьего подхода фишку просёк.
    Ответ написан
    1 комментарий
  • Автоматическая сортировка столбца в Excel?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Сам вот именно такого не делал, но в принципе довольно просто:
    Делаешь исходную таблицу с формулами, а итоговую с фиксированными отсортированными значениями колонки, а остальные значения в других колонках итоговой подтягивай из исходной таблицы по отсортированной колонке ну хотя бы впр, или поискпоз/индекс, или суммпроизв.
    Ответ написан
    Комментировать
  • Как условно (значение в столбце) искать подстроки в другом столбце в цикле python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Я тут накропал
    велосипедик на костылях
    import pandas as pd
    
    
    def get_pairs(keys: list, data: list) -> dict:
        """
        Подготовительная функция
        Раскладывает значения из data по ключам из key в порядке, как в key
        :param keys: ['foo', 'spam', 'foo', ...]
        :param data: [('foo', 'bar'), ('foo', 'baz'), ('spam', 'ham'), ...]
        :return: {'foo': ['bar', 'baz'], 'spam': ['ham'], ...}
        """
        inter_pairs = dict([(key, []) for key in set(keys)])
        while bool(len(data)):
            key, value = data.pop(0)
            inter_pairs[key].append(value)
        return inter_pairs
    
    
    def prepare_next_attr(key: str, value: str, descr: list) -> tuple:
        """
        Служебная функция
        Готовит очередной комплект атрибутов
        для вычисления следующего результата
        :param key:
        :param value:
        :param descr:
        :return: next_key, next_pair, next_descr
        """
        descr = [i.lower() for i in descr]
        next_key = f'{key.lower()}, '
        next_pair = f'{next_key}{value.lower()}'
        next_descr = descr.pop(0)
        return next_key, next_pair, next_descr
    
    
    def get_next_res_item(key: str, value: str, descr: list) -> str:
        """
        Служебная функция
        Готовит результат, сравнивая по Descr
        (тут подгонка if-ами под задание)
        :param key:
        :param value:
        :param descr:
        :return: результат для помещения в список результатов
        """
        next_key, next_pair, next_descr = prepare_next_attr(key, value, descr)
        if next_pair == next_descr:
            res_item = f'{key}: {value};'
        elif next_key in next_descr:
            res_item = f'{key};'
        else:
            res_item = f'{key}'
        return res_item
    
    
    def make_result(keys: list, inter_pairs: dict, descr: list) -> pd.Series:
        """
        Перебирает ключи, получает для каждого очередной результат,
        складывает результаты в pd.Series
        :param keys:
        :param inter_pairs:
        :param descr:
        :return: pd.Series с результатами
        """
        intermedia_result = []
        for key in keys:
            value = inter_pairs[key].pop(0)
            intermedia_result.append(
                get_next_res_item(key,
                                  value,
                                  descr)
            )
        return pd.Series(intermedia_result)
    
    
    if __name__ == '__main__':
        df1 = {
            'Descr': ["VALVE, PRESSURE", "pump ttf", "Valve, electrical", "Geeku, electrical",
                      "VALVE, OVERBOARD, BUTTERFLY"],
            'N_Product': ["VALVE", "PUMP", "VALVE", "GEEKU", "VALVE"],
        }
        df2 = {'N_Product': ["VALVE", "VALVE", "VALVE", "PUMP", "GEEKU"],
               'M_Product': ["PRESSURE", "qwerty", "", "", "ELECTRICAL"],
               }
        target = {
            'Descr': ["VALVE, PRESSURE", "pump ttf", "Valve, electrical", "Geeku, electrical", "VALVE, OVERBOARD, "
                                                                                               "BUTTERFLY"],
            'N_Product': ["VALVE", "PUMP", "VALVE", "GEEKU", "VALVE"],
            'Result': ["VALVE: PRESSURE;", "PUMP", "VALVE;", "GEEKU: ELECTRICAL;", "VALVE;"], }
        df1 = pd.DataFrame(df1)
        df2 = pd.DataFrame(df2)
        df_target = pd.DataFrame(target)
    
        df2_list = list(zip(df2['N_Product'], df2['M_Product']))
        pairs = get_pairs(df1['N_Product'], df2_list)
        result = make_result(df1['N_Product'], pairs, df1['Descr'])
        df1['Result'] = result.values
    
        print(df1)
        print(all(df1 == df_target))

    Он вроде формально решает задачу... но опять же формально это не ответ на вопрос, а подгонка под целевое задание, причем совсем не pandas-way. Ну, чем могу...
    Ответ написан
    Комментировать
  • Цикл на повторение действия после прохождения каждой строки (xlrd)?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Что-то примерно такое должно быть:
    Такое...
    import requests
    import xlrd
    from pathlib import Path
    
    
    def my_xml(citype, oldname, newname):
        return f'''<?xml version='1.0' encoding='UTF-8'?>
        <API version='1.0' >
            <citype>
                <name>{citype}</name>
                    <criterias>
                        <criteria>
                            <parameter>
                                <name compOperator="IS">CI Name</name>
                                <value>{oldname}</value>
                            </parameter>
                        </criteria>
                    </criterias>
                <newvalue>
                    <record>
                        <parameter>
                            <name>CI Name</name>
                            <value>{newname}</value>
                        </parameter>
                    </record>
                </newvalue>
            </citype>
        </API>'''
    
    
    if __name__ == '__main__':
        datafilename = Path('data.xls')
        datafilepath = Path.home() / Path('Documents/Pytest/')
        datafile = datafilepath / datafilename
        book = xlrd.open_workbook(datafile)
        sh = book.sheet_by_index(0)
        url_prefix = "http://qwerty.com/api/ci?OPERATION_NAME=update&INPUT_DATA="
        for i in range(0, sh.nrows):
            print(f'## Итерация номер {i} из {sh.nrows}.')
            oldname = str(sh.cell_value(rowx=i, colx=0))
            citype = str(sh.cell_value(rowx=i, colx=1))
            newname = str(sh.cell_value(rowx=i, colx=2))
            url = url_prefix + my_xml(oldname, citype, newname)
            requests.post(url)
    Ответ написан
    2 комментария
  • При выводе данных в Excel из SQL не выводятся имена столбцов?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Сначала разберись, что именно происходит в приведённом коде. Прям распиши построчно себе, что и зачем делается.
    А затем надо в этот код добавить запись строки с именами столбцов перед записью самих столбцов.
    Имена столбцов можно получить из БД запросом типа:
    select *
    from INFORMATION_SCHEMA.COLUMNS
    where TABLE_NAME='tableName'
    Ответ написан
  • Почему явное приведение типа в питоне не работает (openpyxl)?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    'A' + index + 5
    это и есть str + int
    Ответ написан
    1 комментарий
  • Как узнать значение ячейки на пересечении двух ячеек xls таблицы с помощью openpyxl?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Есть три пути:
    1. Средствами excel - вставить куда-то в таблицу формулу типа «суммеслимн» или «суммпроизв» с соответствующими параметрами, типа вот так:
    ws["A1"] = "=SUM(1, 1)";
    2. Загрузить таблицу в pandas, правильно указать имена колонок и индекс, и потом обращаться к dataframe по именам колонок и индексам;
    3. изобретать свой велосипед.
    Ответ написан
  • Как объединить несколько файлов EXCEL на одну таблицу?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Я это делаю через pandas. Импортирую в pandas первую анкету, потом в цикле в другой датафрейм вторую, ее к первой вторую присоединяю и следующую анкету во второй df, потом по-окончании пачки таблиц данные нормализую и в excel выгружаю.
    Ответ написан
    Комментировать