Задать вопрос
  • Как отобразить топ 10 записей в датасете pandas, которые требовали самого длительного времени исправления?

    Maksim_64
    @Maksim_64
    Data Analyst
    df['updated'] = pd.to_datetime(df['updated'],errors='coerce' )
    df['created'] = pd.to_datetime(df['created'],errors='coerce' )
    df['resolved'] = pd.to_datetime(df['resolved'],errors='coerce')

    Это сработает, единственное, в этих колонках кое где есть значения которые он не может распарсить, c этим ничего сделать нельзя посредством pandas. Если они нужны то это отдельно писать парсер для них и изучать каждый кейс. Поэтому для этих кейсов я добавил параметр errors='coerce' там где он не может распарсить он добавил nat. Ну и манипуляции с датами сами я так понял что проблема привести в нужный формат что бы весь мощный функционал pandas был доступен.
    Ответ написан
    Комментировать
  • Как корректно добавить данные в вложенный список в список?

    Maksim_64
    @Maksim_64
    Data Analyst
    a1.append(a.copy())
    И увидите как вы ожидаете, а происходит так потому что вы добавляете ссылку на лист, а нужно добавлять копию, объекта.
    Ответ написан
    Комментировать
  • Как изменить формат куков, import browser_cookie3?

    Maksim_64
    @Maksim_64
    Data Analyst
    import requests
    import browser_cookie3
    import json
    cookies = browser_cookie3.chrome()
    dict_cookies = requests.utils.dict_from_cookiejar(cookies)
    with open("cookies.json", "w") as f:
        json.dump(dict_cookies, f)
    Ответ написан
    Комментировать
  • Как получить текст из тега?

    Maksim_64
    @Maksim_64
    Data Analyst
    for row in soup.find_all('p')[0].text.split('/n'):
        print(row)
    Ответ написан
  • Как транспонировать таблицу в пандасе так, чтобы даты стали группирующей колонкой над всем, кроме времени?

    Maksim_64
    @Maksim_64
    Data Analyst
    import pandas as pd
    #создаю такую же таблицу как у тебя
    df = pd.DataFrame({
        'Дата':['23-01-01','23-01-01','24-01-01','24-01-01'],
        'Часы':['10:00','11:00','10:00','11:00'],
        'Процент':[10.2,11.2,22.2,42.2],
        'Опрошенных':[20,27,40,12]
    })
    #само решение
    reshaped_df = df.pivot(index=['Дата'],columns='Часы',values=['Процент','Опрошенных'])\
        .swaplevel(axis=1).T.reset_index()\
        .pivot(index='Часы',columns='level_1')
    reshaped_df.columns.names = ['Дата',None]
    print(reshaped_df)


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

    Да у тебя порядок [процент, опрошенных, процент, опрошенных] а у меня [опрошенных, процент, опрошенных, процент] на данные сами числа естественно полностью совпадают. Если это играет какую-то роль то столбцовые мульти-индексы сам подправишь. А в остальном полная копия твоей таблицы.
    Ответ написан
    4 комментария
  • Какую библиотеку Python лучше использовать для создания точечных Excel диаграмм с двумя координатами?

    Maksim_64
    @Maksim_64
    Data Analyst
    Вот то что вы ищете с учетом экспорта в excel при чем на всякий случай несколькими способами.
    www.geeksforgeeks.org/python-plotting-scatter-char...
    Ответ написан
    Комментировать
  • Сколько комбинаций из цифр 5678?

    Maksim_64
    @Maksim_64
    Data Analyst
    Вы имеете ввиду сколько перестановок возможно без замены то есть если я использовал например 8 то все я не могу использовать 8 снова. Логика следующая у вас есть 4 позиции _,_,_,_ на первую вы можете сколько вариантов подставить вы имеете на выбор 5, 6, 7, 8 то есть 4. Вы имеете 4,_,_,_. Теперь выбираете из 3 чисел. 4,3,_,_ и по той же логике получаете 4*3*2*1.
    Ответ написан
    Комментировать
  • Как заменить pandas.append на pandas.concat?

    Maksim_64
    @Maksim_64
    Data Analyst
    Сначала собираете все датафреймы в отдельный лист, затем конкатенируете и все. По вашему коду должно быть как то так. Протестировать то код я не могу возможно где то опечатки. Собираете фреймы в лист в цикле, а затем за пределами цикла конкатенируете в общий фрейм и вне цикла записываете в файл.
    import io
    import pandas as pd
    
    
    excel_file = io.BytesIO()
    excel_file.name = "table_excel.xlsx"
    all_frames = []
    for history in ads:
        item_title = history.get("item_title")
        item_price = history.get("item_price")
        current_df = pd.DataFrame(
            {
                "Имя": [item_title],
                "Цена": [item_price],
            }
        )
        all_frames.append(currend_df)
    final_df = pd.concat(all_frames, ignore_index=True)
    
    final_df.to_excel(excel_file, encoding="utf-8", index=False)
    Ответ написан
  • Как сделать так, чтобы бот отправлял текст в таком формате который я ему отправляю?

    Maksim_64
    @Maksim_64
    Data Analyst
    Первое вам нужно отформатировать message.caption, строка которая там будет содержаться должна иметь вид
    "*жирный*" То есть вам в вашей строке нужно обернуть слово или всю строку *текст*.
    Второе это поставить параметр parse_mode = 'Markdown'
    Ответ написан
  • Почему считает не все символы?

    Maksim_64
    @Maksim_64
    Data Analyst
    где у вас print(a) вставьте вот этот код, вы выводите на печать длину массива, а нужно суммировать длины строк каждого элемента массива.
    print(sum(len(i) for i in a))
    Ответ написан
    Комментировать
  • Почему функция y=x^x начинает возрастать, начиная с аргумента 1/e?

    Maksim_64
    @Maksim_64
    Data Analyst
    Потому что точка (1/e, f(1/e)), это критическая точка. Критическая точкой называется точки где функция либо не дифференцируема, либо производная функции равна нулю.
    Соответственно наша функция, y = x^x, ее производная будет x^x*(ln(x) + 1). далее приравниваем производную к нулю x^x*(ln(x) + 1) = 0 и решаем для x. Решением данного уравнения будет 1/e Подставляем 1/e в исходное функцию и получаем это вы уже нашли округленно 0.692. (1/e,0.692) - Критическая точка. А в критических точках функция меняет свое направление, то есть если до этого шла на убавление проходя через критическую точку она пойдет на возрастание и наоборот.
    И так ответ Потому что (1/e, f(1/e)) Является критической точкой.
    Также далее посредством тестов можно найти является ли критическая точка локальным минимумом или максимум в нашем случае глобальным потому что она одна. В данном случае тест легко покажет что это точка глобальный минимум. А минимум слева убывает проходит через критическую точку и начинает возрастать.
    ДОПОЛНЕНИЕ К ответу.
    Выходит, что до 1/e функция убывает, а после - возрастает. Откуда берется такая связь?

    Здесь дело в том что данная критическая точка как указал выше является минимумом в контексте вашего вопроса даже не важно глобальным или локальным. Что бы критическая точка называлась минимум производная функции должна быть отрицательной слева от критической точки и положительной справа от критической точки если подставим в производную (ее я привел в самом начале) число не много меньшее чем критическая точка то мы получим отрицательное значение (что значит функция убывает) а если не много большее то положительное значит (функция возрастает). Поскольку функция убывает слева от критической точки и возрастает после нее это и есть определение минимума. Мы сейчас математическим методом нашли минимум. То есть ваша функция убывает до критической точки и возрастает после нее. Потому что точка является минимумом (в данном случае глобальным). Так будет не много точнее.
    Ответ написан
    Комментировать
  • Какое "time complexity" имеет операция list[element]?

    Maksim_64
    @Maksim_64
    Data Analyst
    Программа выполнится с 0(1), никакого чтения всего листа не произойдет. Потому что все вы делаете это получаете элемент по индексу. Например если изменить немножко вопрос скажем у нас есть список и словарь.
    'B' in ['A', 'B','C'] Вот это операция будет O(n)
    В то время как
    'B' in {'A':1,'B':2,'C':3}
    останется O(1).
    Ну и напоследок если список отсортирован и python знает что он отсортирован то проверка на наличие элемнта в списке будет тоже O(1).

    ОТРЕДАКТИРОВАНО
    Ну и напоследок если список отсортирован и python знает что он отсортирован то проверка на наличие элемнта в списке будет тоже O(1).

    Это утверждение абсолютно неверно. На мою ошибку указал Roman K В комментарии к моему ответу.
    Ответ написан
    5 комментариев
  • Как обратиться к элементу json?

    Maksim_64
    @Maksim_64
    Data Analyst
    id_key = list(parsed_app_json.keys())[0]
    print(parsed_app_json[id_key]['data']['name'])

    В id_key будет всегда попадать первый ключ, соответственно вы сможете обращаться к ключу name независимо от значения первого ключа.
    Ответ написан
  • Возможно ли requests сохранять вкладку включенной?

    Maksim_64
    @Maksim_64
    Data Analyst
    Да возможно.
    session = requests.Session()
    Ответ написан
    Комментировать
  • Pandas: Как вернуть один столбец из двух переданных в DataFrame.apply()?

    Maksim_64
    @Maksim_64
    Data Analyst
    Первое что бы получить mean по группам для этого в pandas есть мощный инструмент groupby
    например в вашем случае
    means = data.groupby('Социальный класс').mean()
    Это даст вам датафрейм где вы на группе запустили аггрегирующуюю функцию (можно не одну)
    теперь к ответу на вопрос все решается в одну строчку
    data["Возраст"] = data.groupby("Социальный класс").transform(lambda x: x.fillna(x.mean()))

    все этот код решит ваш вопрос, для его лучшего понимания (очень рекомендую) разберитесь как следует с groupby это очень частая проблема.
    Ответ написан
    4 комментария
  • (telegram aiogram)Выдает ошибку NameError: name 'time' is not defined?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну вы нигде не импортировали функцию time по этому и выдает ошибку.
    вначале файла импортируйте ее.
    from datetime import time
    Но судя по коду который у вас написан, появятся другие ошибки. Связанные с функцией time.
    Ответ написан
  • Как изменить элемент одного списка, который равен другому списку?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну код ваш совсем не рабочий, первое отступы (у вас 8 должно быть 4), второе new_pole вы должны объявить до цикла, до присваивания в цикле дело не дойдет когда new_pole[i_col][i_row] python выдаст ошибку уже вот здесь что не знает что такое new_pole.
    Теперь ответ на ваш вопрос, Когда вы делаете что то типа
    list1 = [1,2,3]
    new_list = list1

    вы не создаете два объекта вы создаете две ссылки на один и и тот же объект [1,2,3]. И скажем если вы сделаете
    list1.append(4) У вас будут изменения и в new_list. Потому что объект всего один а ссылки на него две.
    Что бы избежать это нужно использовать deepcopy
    Вот ваш код но в рабочей версии.
    from copy import deepcopy
    pole = [['x', 'x', 'x', '.'], ['.', '.', '.', '.'], ['x', '.', 'x', 'x'], ['x', '.', '.', '.']]
    new_pole = deepcopy(pole)
    for i_row in range(len(pole)):
        for i_col in range(len(pole[i_row])):
            new_pole[i_col][i_row] = pole[i_row][i_col]
    print(pole)
    print(new_pole)
    Ответ написан
    1 комментарий
  • Как получить PNG из NumPy array без сохранения?

    Maksim_64
    @Maksim_64
    Data Analyst
    PIL.Image.Open() это для открытия файлов. То что вы спрашиваете должно звучать так как конвертировать numpy массив в PIL.Image объект. Для это существует метод PIL.Image.fromarray(array), Возможно придется сделать rehape у массива, возможно придется задать какие то дополнительные параметры у метода fromarray. Но ваш вопрос решается этим методом.
    Ответ написан
    2 комментария
  • Как в Scrapy сохранить результат в JSON при запуске из скрипта?

    Maksim_64
    @Maksim_64
    Data Analyst
    нужно добавить в settings.py он должен был создаться в вашем scrapy проекте.
    FEEDS = {
        'filename.json': {'format': 'json'}
    }
    Ответ написан
    Комментировать
  • Как сконвертировать минуты в часы и минуты?

    Maksim_64
    @Maksim_64
    Data Analyst
    А почему ваше решение не проходит? Ну вот попробуйте альтернативное решение (которое также работает).
    hour = int(input("Введите часы: "))
    minute = int(input("Введите минуты: "))
    waiting = int(input("Введите ожидание в минутах: "))
    
    total_minuts = minute + waiting
    waiting_h = total_minuts // 60
    result_m = '0' + str(total_minuts % 60) if total_minuts % 60 < 10 else total_minuts % 60
    
    result_hours = hour + waiting_h
    if result_hours >= 24:
        result_hours = result_hours - 24
    
    if (result_hours < 10): 
        result_hours = '0' + str(result_hours)
        
    print(f'На часах будет: {result_hours}:{result_m}')
    Ответ написан
    Комментировать