Задать вопрос
  • Как добавить данные в Series через ссылку на объект?

    Feor_slen, Конечно же есть. доки.pandas доки можно вполне читать как книгу. Куча хороших примеров.
  • Как на pandas получить подобие оконной функции SQL?

    Сергей c0re, Неплохо, для того кто только учится с pandas работать. Дам тебе пару тройку советов, если предстоит писать pandas в проде. Сейчас может они тебе покажутся лишними но потенциально они могут с экономить недели времени.
    1. Когда решаешь pandas проблему то старайся решать класс проблем а не конкретную и оборачивать это дело в функцию (сам завпрос например), где параметры функции это частности (в том числе и твоя проблема)

    2. изучи из доков .pipe()

    3. налегай на chaining ты можешь комментировать раскомментировать строки внутри chain это экономит тьму времени, когда нужно смотреть двигаешься ты в нужном направлении или нет.

    Иотого твоя большая pandas проблема делится декомпозируется на подпроблемы, оборачивается в функции и затем ты это дело выстраиваешь в pipeline методом pipe. Псевдо код будет такой.

    original_frame = pd.DataFrame(data=some_data)
    def first_function(df:pd.DataFrame,*args,**kwargs)->pd.DataFrame:
        pass
    
    def second_function(df:pd.DataFrame,*args,**kwargs)->pd.DataFrame:
        pass
    
    def third_function(df:pd.DataFrame,*args,**kwargs)->pd.DataFrame:
        pass
    
    result = (
        original_frame
        .pipe(first_function,*args, **kwargs)
        .pipe(second_function,*args, **kwargs)
        .pipe(third_function,*args, **kwargs)
        ...
        ...
        .pipe(last_function,*args,**kwargs)
    )

    Вот таким образом твой pandas код не превратится во что то нельзя поддерживать улучшать и т.д. И ты будешь иметь доступ к каждому уровню своей декомпозированной большой проблемы.

    Удачного кодинга.
  • Как на pandas получить подобие оконной функции SQL?

    Сергей c0re, Выглядит как два вопроса. Если нужна сортировка по префиксу то можно так. Хотя опций много
    df = pd.DataFrame({
        'A':['first_sometext','second_some_text','first_numbers','third_text','second_something'],
        'B':[100,4,2,45,23]
    })
    result = (
        df.assign(
            prefix = lambda x: pd.Categorical(x['A'].str.split('_').str[0],categories=['first','second','third'])
        )
        .sort_values(by='prefix')
        .drop(columns=['prefix'])
    )
    print(result)

    lambda не поддерживает конструкции по типу swith case. как в SQL case when then, на уровне lambda нету.
    Реализуется это приблизительно многими способами.
    result = (
        df.assign(
            prefix = lambda x: pd.Categorical(x['A'].str.split('_').str[0],categories=['first','second','third'])
        )
        .sort_values(by='prefix')
        .assign(conditions='default')
        .assign(conditions= lambda x:x['conditions'].where(~(x['prefix']=='first'),'Первый'))
        .assign(conditions= lambda x:x['conditions'].where(~(x['prefix']=='second'),'Второй'))
        .assign(conditions= lambda x:x['conditions'].where(~(x['prefix']=='third'),'Третий'))
        .drop(columns=['prefix'])
    )
    print(result)


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

    Формально туже самую замену что я сделал можно сделать проще. replace и там словарь ключ значение. Где ключ что меняем значение на что заменяем. Но мой вариант выше позволяет организовыть сколь угодно сложные замены.
  • Как на pandas получить подобие оконной функции SQL?

    Сергей c0re,
    делает какую-то дичь и выводит что-то непонятно странное... !???

    .loc[lambda x: x['date_time'] == x['latest'],:] выбирает те строки где твоя дата равна последней дате, довольно понятно. Четко сформулируй что ты хочешь. 46 строк по количеству твоих групп. У тебя file_name содержит 46 групп. Я сейчас глянул на данные там у тебя более чем одна строка может быть (в последней дате). Если ты хочешь оставлять все значения опять таки опций много можно rank использовать например как то так
    result = (
        df.
        assign(
        latest=lambda x:x
        .groupby("file_name")["date_time"]
        .rank(method='dense')
              )
        .loc[lambda x: x['latest'] == 1,:]
    )
    
    result
    Возможно надо будет, поменять параметр, потому что точно что ты хочешь получить ты не говоришь. Все я тебе достаточно помог.
  • Как на pandas получить подобие оконной функции SQL?

    Сергей c0re, Не понял, в чем проблема с прочтением. Я просто терпеть не могу плодить кучу переменных по этому пишу pandas используя chaining.

    result = (
        df.
        assign(latest=lambda x:x
        .groupby("some_name")["date_time"]
        .transform(pd.Series.nlargest, 1)
              )
        .loc[lambda x: x['date_time'] == x['latest'],:]
    )
    print(result)
    В чем проблема запустить этот код. На некой категориальной переменной он выберет подсет с самыми большими датами по каждой группе. Я создал временную колонку latest последняя дата, затем сгрупировал затем трансформировал ее методом series, nlargest и оставил самую последнюю дату например мог оставить 2-3 да сколько угодно. Затем выбрал этот подсет, если временная колонка latest не нужна то ее можно дропнуть в конце. Я в целом принцип показал. вместо pd.Series.nalrgest можешь использовать приблизительно тысячу других функций или написать свою.
  • Автоматизация гостиницы — реальность или фантазия?

    OtelVetrov, Автоматизация всего, потенциальна рентабельна при большой текучке, например автономные супермаркеты существуют. В отели большой текучки не будет, то есть мощности будут простаивать, второй момент сбор данных, большинство собранных данных окажутся бесполезными, а например в автономном супермаркете, они активно используются. Ну и третий аспект, самый главный привычки люди хотят взаимодействовать с людьми а не с автоматами. А подобные инновации будут красоваться на выставках и о них расскажут на различных форумах, и что это дело завтрашнего дня.
  • Мне использовать те же параметры нормализации, что были на обучающем или нормализовать данные с нуля?

    Jut_Rut, Так делать можно, если у тебя остается тестовый сет, который ты не трогал, то все ок.
  • Мне использовать те же параметры нормализации, что были на обучающем или нормализовать данные с нуля?

    Jut_Rut, Нет не правильно. У тебя есть тренировочный набор и тестовый набор. Тренировка это получение "знаний твоей модели".

    Есть конечно кросс валидация. Но у ней не много другие цели подбор гипер параметров и не только.
    У ней есть параметр kfold (количество разбиений), например 5. Разбивают данные на 5 частей. Сначала 4/5 используют как тренировочный сет 1/5 как валидационный набор, потом другие 4/5 как тренировочный набор и другую 1/5 как тестовый и т.д. Вот картинка https://scikit-learn.org/stable/modules/cross_vali..., это без разницы какая библиотека, с нейронными сетями так же делают.

    Но в прод идет модель которую ты тренировал на тренировочном датасете а тестировал на тестовом. И никогда ты не тренируешь на данных из тестового сета. Модель ничего о нем знать не должна.
  • Мне использовать те же параметры нормализации, что были на обучающем или нормализовать данные с нуля?

    Jut_Rut, На самом деле ничего тебе не мешает для препроцессинга использовать scikit-learn. Но и никто не запрещает просто сделать функцию, normalize. Где параметры будут из тренировочного сета. Как удобно. Главное не считать ничего на тестовом/ валидационном наборе. Это называется. data leakage.
  • Как вытащить из текста эмоджи?

    Айзиля Каримова, И да если ты потом будешь прогнозировать тебе все равно придется кодировать эти emoji на уровне pandas то называется создание dummy переменных, на уровне ML хоть в scikit-learn хоть в других (даже не python библиотеках) это называется OneHotEncodeing. По смыслу это буде так. Предположим у тебя для простоты два смайла улыбка и досада. У тебя появляется две новые колонки улыбка и досада. например твоя первая строка содержит смайл улыбка. В колонке улыбка появляется запись 1 в колонке досада 0. Во второй строке у тебя смайл досада в колонке улыбка получается 0 в колонке дасада 1. Если есть строки где нет смайлов то у тебя все нули. Если в строке и досада и радость то и там и там единицы и по такому признаку хоть для 100 смайлов хоть для тысячи.
  • Как вытащить из текста эмоджи?

    Айзиля Каримова, Ну так если ты вытащила все эмоджи в отдельную строку. 1. Ты можешь получить коллекцию юникодов каждого библиотека emoji (на всякий случай там внутри есть коллекция всех эмоджи). 2. Если ты смогла вытащить в отельную строку значит ты можешь знать содержит строка емоджи или нет то есть получать True или False. Значит ты можешь и выбрать необходимый подсет. df.loc[булевый массив, список колонок]. False строка не войдет в выборку. True войдет. булевый массив длинной равной длинне фрейма.

    Смотри если ориентироваться на твою картинку то у тебя там в качестве объектов python списки. Сам тип столбца object что означает (python обject). Ты можешь написать функцию которая на вход получает список если список пуст возвращает например NaN если список не пуст, ну берет например последний элемент (последний эмоджи). Затем применить создать новый столбец df['last_emoji'] = df['emoji'].apply(your_function), где your_function простенькая python функция как я выше описал. Что то типо такого можно, потом выбрать все строки которые не содержать пропущенных значений и все. Много способов.
  • Как корректно составить запрос на выборку?

    Starvings, Так сложно сказать, что ты имеешь ввиду. Лучше отдельным вопросом и данные на вход, данные на выход, тогда кто-нибудь да подскажет.
  • Когда надо использовать инстанс методы и когда класс методы?

    hardy_99, Проехали, ты не читал мой ответ. У них даже области видимости разные ты не можешь внутри метода класса совершать действия над экземпляром класса. Ты вообще используешь метод класса, как статический метод, в который ты передаешь параметр и он оперирует им. Myclass.calculate_something(a) - это используется, как статический метод. Для расчетов внутри классов. Ты не используешь параметр cls - это объект класса. Какой толк от твоего метода класса? Никакого.
    метод класса имеет первым параметром cls - объект класса. Вот с ним и оперируй. метод экземпляра класса имеет первым параметром self - объект экземпляра класса.
  • Когда надо использовать инстанс методы и когда класс методы?

    hardy_99, ну сделай расчет бензобака для разных экземпляров класса. На вход ну например объем бензобака и расход. Инициализируй два экземпляра класса две машины, с разными объемами и расходами и посчитай на сколько хватит.
  • Как ускорить работу с большими таблицами данных?

    acroloid, И посмотри типы данных у своего фрейма, df.dtypes может у тебя там float64, int64. А у тебя данные которые можно хранить по скромнее. Это ускорит дело, по крайней мере на стороне pandas.
  • Как ускорить работу с большими таблицами данных?

    acroloid, Посмотри, у dash очень хорошие доки. Там есть примеры с маленькими фреймами. И через callback осуществляется взаимодействие с ними. Тебе не надо отрисовывать весь фрем, а только результаты. На самом деле я слабо представляю зачем даже весь подсет нужен, обычно таблицы используются для summary. А для остального графики.
  • Как ускорить работу с большими таблицами данных?

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

    Александр, counter не там объявляешь. Тебе же сбрасывать счетчик нужно, при переходе к новому варенью.

    for i in range(len(name)):
        counter = 0
        for c in range(len(name[i])):
  • Что можно написать в дипломной работе по теме восприятие пользователем результатов прогностических систем?

    https://www.statlearning.com/ Загрузи вот эту книгу. Первые четыре главы, тебе могут очень помочь (остальное прочитаешь позже). Также kaggle notebooks помогут (для каких то конкретных задач). Со Streamlit не работал, можешь глянуть галерею по dash https://plotly.com/examples/?_gl=1*19do63v*_ga*MTk.... (Если что они open source, на github их код лежит).Такого уровня конечно приложения тяжело создать будет (с точки зрения оформления), простенькое ты за 20 минут создашь. Но все же. А книга серьезная это классика от стенфорда в мире DA/DS. И общую картинку первые 4 главы хорошую дадут, легче писать будет.