Ответы пользователя по тегу Python
  • Сохраняется ли куда-то скриншот в Pyautogui?

    Maksim_64
    @Maksim_64
    Data Analyst
    Какую память? В текущем виде pyautogui.screenshot() Это объект который хранится в памяти (оперативной). image Это именованный указатель на этот объект. Если ты хочешь сохранить на диск, то нужно указывать путь.
    Ответ написан
  • Memory Error при определении кодировки как чинить?

    Maksim_64
    @Maksim_64
    Data Analyst
    используй для чтения csv pandas, на случай если они там огромные, то с параметром chunksize=количество строк (по простому чтение по частям) и encoding=то что chardet вернул. Далее поставь колонку с номерами телефона в индекс (для пандас не уникальные индексы это совершенно нормально) и верни csv файл с совпадениями. Код будет что то вроде этого. Предположим это твой csv файл
    Номер Телефона,Имя,Фамилия
    333,Иван,Петров
    333,Василий,Сидоров
    444,Петр,Прямой
    333,Федор,Кривой

    import pandas as pd
    phone_numbers = pd.read_csv('test.csv',index_col='Номер Телефона')
    numbers_of_interset = [777,333]
    index = phone_numbers.index.intersection(numbers_of_interset)
    not_found = pd.Index(numbers_of_interset).difference(phone_numbers.index)
    (
        phone_numbers.loc[index,:]
       .to_csv('result.csv')
    )

    Читаем в фрейм и устанавливаем номер телефона в индекс, numbers_of_interest это те номера которые ты хочешь вернуть в качестве выборки если они есть в файле, делаем intersection с индексом фрейма, также находим те что не нашлись. Записываем файл только с теми что есть. При необходимости выводим те что не нашлись хранятся в not_found.

    Если они очень большие и требуют чтения по частям обратись к докам pandas ну или вот пример использования https://www.geeksforgeeks.org/how-to-load-a-massiv...

    Ну и если тебе не нужна вся выборка а только количество совпадений мне это не очевидно из твоего вопроса, то в контексте моего примера
    print(phone_numbers.loc[index,:].shape[0]) Даст тебе количество.
    Ответ написан
    5 комментариев
  • Что значит сообщение oneDNN custom operations are on?

    Maksim_64
    @Maksim_64
    Data Analyst
    Попробуй любой из ответов вот отсюда.
    Ответ написан
    Комментировать
  • Почему функция возвращает только один элемент массива?

    Maksim_64
    @Maksim_64
    Data Analyst
    Потому что выражение return прерывает функцию. То есть у тебя происходит только одна итерация цикла, и затем выход из функции. Собери itemPrice[0] в список объявленный вне цикла (result.append(itemPrice[0])) и верни result вне цикла. Имей ввиду то что ты в своей имплементации объявил itemPrice вне цикла и это имеет 0 эффекта, так как при каждой итерации у тебя создается новый объект, например вот здесь itemPrice = i.find(...
    Ответ написан
    1 комментарий
  • Сквозная сортировка индексов DataFrame?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну с формулировкой вопроса ты подкачал, это переформатирование фрейма с элементами сортировки подсета данного фрейма. Вообще когда решаешь такую задачу, то индексы фрейма (колонки и индекс) будут тебе мешать, надо переводить подсет данных в numpy массив и там сортировать.

    Так или иначе, задачка простая, и решается в одну строчку кода, многими способами , например вот так
    df.loc[:,['A','B','C']] = np.sort(df[['A','B','C']].values,axis=1)

    Это изменит твой фрейм как ты хочешь, или определенными вариациями данного кода.
    Ответ написан
    Комментировать
  • В чём ошибка данных поиска href TypeError: 'NoneType' object is not subscriptable?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ответ в сообщении об ошибке и написан. Объекты типа None не имеют не ключей не индексов ты пытаешься обратится по ключу ['href'].
    вот это item.find(class_="link") не None по скольку он не ругается на метод find. А после вот этого .find('a') у тебя объект типа None.
    Ответ написан
  • Как выравнивать столбцы Pandas для красивого вывода в терминале?

    Maksim_64
    @Maksim_64
    Data Analyst
    С учетом того что в родном IDE все не ровно, то на ум приходит только следующая причина. Тип данных твоих колонок 'object' или 'string' и строки содержат пробелы в начале и в конце. В общим нужно применить метод strip (удалить лишние пробелы в начале и в конце строки).
    result = df.assign(**{
        'Системы:':lambda x:x['Системы:'].str.strip(),
        'Текущий %:':lambda x:x['Текущий %:'].str.strip(),
        'Плановый %:':lambda x:x['Плановый %:'].str.strip()
    })
    print(result)

    Если речь именно об этих данных что ты приложил в примере, то в моем python IDE они выглядят вот так
    65e0b054c7d7a530628786.png
    Как видишь вполне себе ровно, это без моего кода удаления пробелов. Так как в предоставленных тобой данных нет лишних пробелов.
    Ответ написан
  • Почему при замене значения в DataFrame на pandas происходит ошибка, но значение меняется?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Это не ошибка, а предупреждение которому сто лет в обед, более того в зависимости от твоей версии pandas, ты можешь видеть не одно а сразу два предупреждения. В pandas давно уже целый раздел документации посвящен этому copy_on_write

    2. Детали про copy_on_write прочтешь в документации, там все расписано не хочу повторяться. Собираешься работать с pandas, ты должен знать что это такое.

    3. Правильный способ безопасно осуществить операцию, которую ты хочешь (что бы не было предупреждений и работало, как ты ожидаешь.
    pd.options.mode.copy_on_write = True
    info = {'color': ['blue', 'green', 'yellow', 'red', 'white'],
    'object': ['ball', 'pen', 'pencil', 'paper', 'mug'],
    'price': [1.2, 1.0, 0.6, 0.9, 1.7]}
    frame = pd.DataFrame(info)
    frame.loc[2,'price'] = 100 
    print(frame)

    Ну и обнови на всякий случай pandas по скольку copy_on_write будет по умолчанию установлен в True в будущих версиях.
    Ответ написан
    Комментировать
  • Как получить данные колонки Pandas?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну у тебя не много колонок, а всего одна. Элементы массива (имена колонок) идут через запятую. А все что ты заскринил, это одна строка, как следствие один элемент массива.

    Как пофиксить, ну я не знаю что у тебя там в файле, но предположу что у тебя в файле разделение на колонки происходит сивволом ';'. Как следствие тебе нужно указать параметром при чтении.
    df = df.read_csv(filename, sep=';') Ну и остальные параметры которые ты там указываешь. Решит ли это все проблемы неизвестны. Надо видеть в каком состоянии файл. Чтение файлов иногда может быть серьезной проблемой, которая потребует написания функций для проблемной части парсинга.
    Ответ написан
    1 комментарий
  • Как исправить ошибку invalid literal for int() with base 10: '0 из 90'?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ты пытаешься преобразовать строку в число. А именно где то ты вот эту строку пытаешься преобразовать в число '0 из 90', ожидая что там '90' ну или '0'. То есть в буквальном смысле у тебя где то в коде происходит. int('0 из 90') Что выдаст точно такую же ошибку. Отлаживай что бы там было строковое представление целого числа.
    Ответ написан
    Комментировать
  • Как лучше построить архитектуру ML-сервиса?

    Maksim_64
    @Maksim_64
    Data Analyst
    Мало информации, конечно. Я обычно использую dash. Он позволяет создать полноценное веб приложение. Для взаимодействия с пользователем. Есть большое коммунити например я использую компоненты для создания красивого интерфейса и взаимодействия. Насчет одновременного доступа не проблема, каждая сессия пользователя изолирована. В доках есть раздел галерея там большие и крутые проекты выложены на github, то есть можно много чего подсмотреть. Есть и платные компоненты. Все что по ссылкам это бесплатно и для продакшен уровня достаточно.

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

    А так в небольшие сроки можно крутое приложение, как по дизайну (фронт) так и по функционалу сделать. И все в рамках одного языка даже фронт.
    Ответ написан
    Комментировать
  • Как в сделать Pandas объединение строк группирую по определнному столбцу?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну на сам деле задачка на 5 минут, есть определенные методы заполнения пропущенных значений, 'ffill' forward fill и 'bfill' backward fill. Они и есть ключ к решению, далее группировка происходит без проблем, и дальнешее дело техники, при чем многими способами, например так.
    f = pd.DataFrame({
        'A':['a',np.NaN,np.NaN,'b',np.NaN,np.NaN,np.NaN,'v',np.NaN,np.NaN,'d',np.NaN,np.NaN],
        'B':['foo','foo','bar','bar','bar','foo','bar','foo','bar','foo','bar','foo','bar']
    })
    result = (
        df
        .groupby(df['A']
        .fillna(method='ffill'))['B']
        .apply(lambda x: ','.join(x))
        .reset_index()
    )
    result
    Ответ написан
  • Как добавить данные в Series через ссылку на объект?

    Maksim_64
    @Maksim_64
    Data Analyst
    Вообще так с pandas не работают.
    1. pandas имеет мощный I/O как следствие эксель в том числе читают прямо в фрейм. Есть функции read_excel и другие, дополнительно перед этим установив различные reader's writer's например openpyxl и др.

    2. Если ты собираешься создать series из python объекта, с числовыми индексами то это list. Если с именованными индексами но это словарь. То есть собирай в словарь или лист. Seires это однородный массив и с именованными индексами, и for циклами их не процессируют.
    Ответ написан
    2 комментария
  • Как сделать таблицу с возможностью скачать выбранные строки html/js?

    Maksim_64
    @Maksim_64
    Data Analyst
    Тебе нужна библиотека dash+plotly Там и таблицы и графики и приблизительно все что угодно. В качестве хранилища данных может быть, как pandas датафрейм так и база данных. Таблицу как в примере сделать довольно просто. Документация очень большая и очень толковая, там элементарно найдешь полный пример запросов к фрейму и отображения в виде таблиц, график и т.д.
    Ответ написан
    1 комментарий
  • Как на pandas получить подобие оконной функции SQL?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну много способов есть, но самый верный смотреть в сторону groupby.
    (
        df.
        assign(latest=lambda x:x
        .groupby("some_name")["date_time"]
        .transform(pd.Series.nlargest, 1)
              )
        .loc[lambda x: x['date_time'] == x['latest'],:]
    )
    Ответ написан
  • Мне использовать те же параметры нормализации, что были на обучающем или нормализовать данные с нуля?

    Maksim_64
    @Maksim_64
    Data Analyst
    Хороший вопрос. Есть правило никогда не использовать метод fit на тестовом сете. Иными словами будьто нормализация, скалинг, стандартизация или другие трансформации, ты никогда не находишь никакие параметры в тестовом наборе - это грубая ошибка. А всегда используешь только тренировочный набор. По этому все свои mean, std и прочее ты берешь только из тренировочного набора.

    В scikit-learn есть трансформаторы, к примеру StandardScaler так вот у него есть методы fit, transform и fit_transform. Так вот для тестового дата сета ты используешь только transform и никогда fit или fit_transform. Что означает применить трансформацию к тестовому сету с параметрами посчитанными на тренировочном сете.

    С нейронными сетями абсолютно тоже самое без каких либо исключений.
    Ответ написан
  • Что не так с рекурсией?

    Maksim_64
    @Maksim_64
    Data Analyst
    если у рекурсивного кейса отсутствует return то , базовый кейс останавливает рекурсию, но не завершает функцию. То есть после return int(answer) выхода из функции не происходит (только рекурсивный вызов остановлен). python идет дальше, пропускает else, затем у функции отсутствует return и он возвращает None.

    Что бы пофиксить надо добавить return к рекурсивному кейсу то есть return gen_nums(stop_n, number)
    Ответ написан
    Комментировать
  • Почему python возвращает существующий объект, вместо создания нового?

    Maksim_64
    @Maksim_64
    Data Analyst
    Надо же, выглядит все это крайне сомнительно. Сеты мутабельные объекты и оптимизация, как c int или str тут не при чем. При том такое поведение только если я создаю объект налету. К примеру если я соберу их в список
    empty_sets = []
    for _ in range(3):
        empty_sets.append(set())
    
    for obj in empty_sets:
        print(id(obj))

    То работает как и ожидается.
    Или
    a = set()
    b = set()
    a is b
    Тоже как и ожидается.

    Пока экспериментировал вот что обнаружил
    for _ in range(3):
        print(id([]))

    Тоже самое при этом
    for _ in range(3):
        print(id(list()))

    Как и ожидается объекты разные.

    Мое мнение крайне сомнительное поведение.
    Ответ написан
    Комментировать
  • Как вытащить из текста эмоджи?

    Maksim_64
    @Maksim_64
    Data Analyst
    В целом тебе нет необходимости для "удаления" вытаскивать в отдельную колонку. Обычно из фрейма ничего не удаляют, его не изменяют, а извлекают из него подсеты которые отвечают твоим требованиям. Код придется картинкой опубликовать а то форматирование не поддерживает эмоджи.
    6580990e822cb151482037.png

    Если ты не знаешь всех своих эмоджи то есть библиотеки получи все юникоды своих эмоджи и проверяй строку не содержит ли она юникод эмоджи, это будет очень медленно. лучше выбрать их несколько я думаю там их не много и как у меня в примере просто пусть их там десятка два будет а не два. Можно также попробовать простенькой регуляркой отловить что то типа такого
    df[df['comment_text'].str.contains(r'[^\w\s,]', regex=True)]
    Для моего примера работает, сработает ли в целом неизвестно.
    Ответ написан
    4 комментария