Ответы пользователя по тегу Python
  • Python Pandas, как вычислить среднее с подсчетом повторов одновременно?

    @PavelMos
    Так ведь в этой программе новый столбец в датафрейме не создаётся. Чтобы создать нужно ему дать имя:
    df['newcol']=...какие-то действия...

    Далее, среднее от чего ? Если от Value то оно будет 75/4=18,75 т.е. это будет прописано в каждой строке в новом столбце ?
    Тогда просто
    df['mean1']=df['Value'].mean() # значение mean пропишется в каждой строке столбца


    UPD колонка пропадает потому что pandas вероятно берёт в результат только указанную колонку Symbol и ко всем остальным цифровым применяет агрегатную функцию , в данном случаем mean(). Оставлять другие текстовые колонки в результирующем наборе было бы бессмысленно т.к. часть строк из них при группировке по Symbol просто пропадёт.

    Относительно добавления сразу двух столбцов - можно посмотреть "pandas add multiple columns". Можно например так
    df['a'], df['b']=list1,list2 #оба списка по длине равны длине колонки


    но с учётом того, что в этой же строке нужно посчитать count() и прописать соответствующее значение в строки с каждым соответствующим значением Value получится довольно громоздкая конструкция.
    df.groupby(['Name']).size()
    Out[95]: 
    Name
    Igrek    1
    Iks      2
    zet      1
    dtype: int64


    Затем создать соответствие элемент/число вхождений, и по этому соответствию прописать цифры в новом столбце по каждой строке
    df.groupby(['Name']).size().index.tolist()
    df.groupby(['Name']).size().tolist() 
    d=dict( zip (df.groupby(['Name']).size().index.tolist(), df.groupby(['Name']).size().tolist() ) )
    d
    Out[98]: {'Igrek': 1, 'Iks': 2, 'zet': 1}
    Ответ написан
    Комментировать
  • Ошибка в парсере питона. game не определена(((что тут не так?

    @PavelMos
    1) Создавайте вопрос с отформатированным текстом программы, чтобы были видны отступы
    2) BD создаётся как пустой словарь. Далее идёт перебор ключей BD. Но в словаре нет никаких элементов, соответственно переменная game, в которой должно быть значение очередного перебираемого ключа, не определена.
    Big_dict = {}
    BD = {}
    shits1 = []
    
    for game in BD.keys():
        for play in BD[game].keys():
    Ответ написан
    Комментировать
  • "Программа" для записи и показа паролей на Python, как исправить ошибки?

    @PavelMos
    lines = f.readlines()
    lines[int(numb)] = name + ' - ' + parol + '\n'

    Строки читаются в список строк, при добавлении нового пароля программа обращается к списку по индексу, которого там нет. Нельзя взять список x=[1,2,3,9,10] и добавить в нему новый элемент выражением x[6]=20 (но так можно добавить новый элементы в словарь, или перезаписать значение в словаре или списке).
    Добавить в список это append или extend.
    Если пароли добавляются под номерами, нужно потом эти номера считывать с учётом того, что номер пароля может быть не равен индексу строки.

    И еще желательно пользоваться средой, которая показывает, в какой строке в каком месте ошибка. Это условие вообще нужно включить в правила создания вопроса на сайте.
    Ответ написан
    Комментировать
  • Как вывести все содержимое файла?

    @PavelMos
    то же самое можно укоротить:

    with open('g.txt', 'r') as f: 
        print(f.read())


    или
    with open('g.txt', 'r') as f: print(f.read())
    Ответ написан
    Комментировать
  • Почему питон игнорирует первое значение списка?

    @PavelMos
    for sum in list- это перебор элементов списка по-порядку
    mult = mult + list[sum] это обращение к элементу списка по индексу. Первый элемент это 1, значит по индексу это будет уже второй, потому что нумерация идёт с нуля.

    sum = sum+1 - нет смысла, это значение будет сбрасываться в начале цикла, потому что там перебор sum из списка
    Ответ написан
    2 комментария
  • Как удалить строки из таблицы, которые повторяются в другой таблице?

    @PavelMos
    преобразовать датафреймы в списки, точнее в формат двухмерного массива, т.е. список списков, и сделать лист компрехеншн с условием, потом преобразовать обратно с теми же названиями столбцов что были.

    new_list=[x for x in df1.values.tolist() if x not in df2.values.tolist()]
    df3=pandas.Dataframe.from_records(data=new_list, columns=df1.columns.values())
    df3
    Out[217]: 
      col1  col2  col3
    0    A     1     5
    1    B     2     6
    2    D     4     8
    3    C     3   102


    Или как выше написали через объединение в самих датафреймах. Смотря что быстрее будет работать
    Ответ написан
    1 комментарий
  • Объясните, почему не пропускает код?

    @PavelMos
    Проверку условия можно короче сделать - не сравнивать с обоими сторонами, а сравнить только с меньшей

    if diametr<min(a,b):
        result='YES'
    else result='NO'
    Ответ написан
    Комментировать
  • Можно ли в словаре хранить ссылку на хранение?

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

    def ret_a():
        return a
    a='xxx'
    ret_a()
    Out[161]: 'xxx'
    a='zzz'
    ret_a()
    Out[163]: 'zzz'
    d={'a':ret_a}
    d['a']()
    Out[164]: 'zzz'
    a='bbb'
    d['a']()
    Out[166]: 'bbb'


    Если сделать просто универсальную функцию def f(x): return(x), то сама она будет корректно возвращать текущее значение переменной, но через словарь значение изменяться не будет:
    def ret(a):
        return(a)
    b=1000
    ret(b)
    Out[175]: 1000
    d2={'a':ret(b)}
    d2
    Out[180]: {'a': 1000}
    b=9999
    ret(b)
    Out[182]: 9999
    d2
    Out[183]: {'a': 1000}
    Ответ написан
    Комментировать
  • Как заполнить структуру данными?

    @PavelMos
    В этом списке разные данные нужно по разному же разбирать. Если ключ:значение regNum и maxPrice можно брать при переборе i - если i[0]==regNum то записывать data['regNum']=i[1], то соотносить номер в number и название в name нужно по их порядку. Как-то отдельно выбрать все элементы i, у которых i[0]=='number', затем все, у которых i[0]=='name', затем пройтись по двум спискам
    list1=[1,2,3]
    list2=['Apples','Bananas','Oranges']
    list3=list(zip(list1,list2))
    #[(1,'Apples'),(2,'Bananas')...]
    #сформировать список для lots
    lots=[{'number':i[0],'objects':{'name':i[1]}} for i in list3]
    #добавить список как элемент
    data['lots']=lots
    Out[353]: 
    [{'number': 1, 'objects': {'name': 'Apples'}},
     {'number': 2, 'objects': {'name': 'Bananas'}},
     {'number': 3, 'objects': {'name': 'Oranges'}}]
    Ответ написан
  • Программа должна говорить Hello world, но выдаёт ошибку?

    @PavelMos
    1) оформите как код, чтобы было видно отступы
    2) в чем ошибка ? Код выполняется, команда "say..." в системе выполняется
    import os
    import sys
    import webbrowser
    words = "Hello world!"
    def talk(words):
        print(words)
    os.system("say " + words)
    talk(words)
    'say' is not recognized as an internal or external command,
    operable program or batch file.
    Hello world!
    Ответ написан
  • TypeError: cannot use a string pattern on a bytes-like object?

    @PavelMos
    cannot use a string pattern on a bytes-like object
    В data какие данные ? На всякий случай надо через type() посмотреть.
    Строка с регекспом должна применяться к тексту.
    Ответ написан
  • Как реализовать цикл удаление слов из строки в dataframe?

    @PavelMos
    1. Как записан населенный пункт в locality_name ? Если 'деревня Медвежья', то функция её не обработает, потому что if проверяет на совпадение с элементом списка целиком, а не деревню отдельно. Имхо проще не делать проверку дополнительную, а обрабатывать сразу всё подряд
    2. Нужно пробел/ы после удалённого слов/а убирать через lstrip или добавить пробел к словам в списке в регекспе,
    3. Добавить варианты Деревня, Город, Посёлок

    wordlist = ['Посёлок','Поселок','поселок','посёлок','городской','городского','типа','деревня','Деревня']
    
    def locality_id(row):
        name_id = row['locality_name']
        name_id = re.sub('(' + '|'.join(wordlist) + ')','',name_id).lstrip()
        return name_id
    
    
    for idx, row in df1.iterrows():
         print ('cell=', df1.loc[idx, 'locality_name'])
         df1.loc[idx, 'locality_name']=new_cell
         new_cell=locality_id(row)
         print ('new_cell=',df1.loc[idx, 'locality_name'])
    Ответ написан
    Комментировать
  • Как отпарсить текст в Python?

    @PavelMos
    Здесь можно без парсинга регулярными выражениями обойтись, а использовать разделение функцией разделения строки split, которая встроена в каждый объект типа строка
    Далее из результата разбивки
    ['ID: 001', ' Username: Ivan', ' Balance: 01.00', ' Status: active', '']
    берутся элементы 0,1,2, снова разбиваются по ':'
    ' Username: Ivan' ->[' Username',' Ivan']
    и затем исключается оставшийся слева пробел через взятие строки-результата как списка символов без нулевого элемента [1:]

    str1='ID: 001; Username: Ivan; Balance: 01.00; Status: active;'
    out=str1.split(';')
    id=out[0].split(':')[1][1:]
    username=out[1].split(':')[1][1:]
    balance=out[2].split(':')[1][1:]
    Ответ написан
    Комментировать
  • Как применить функцию к массиву numpy?

    @PavelMos
    через list comprehension
    на входе array - список из списков по 4 элемента. В task() передаётся элемент-список из 4 элементов, по элементам которого она считает это значение и записывает его пятым значением в новый элементы, который добавляет в новый массив
    array_out=[ [i[0],i[1],i[2],i[3],task(i)] for i in array]
    Ответ написан
    Комментировать
  • Как в Exchangelib получить все элементы папки Входящие и всех ее подпапок?

    @PavelMos
    Посмотреть вручную, что содержится в объекте, который должен перебираться в цикле, есть ли у него вообще э
    dir(account)
    print(account)
    а также
    print(account.__doc__)
    print(account.folder.__doc__)
    Ответ написан
  • Парсинг xml. Как обойти проблему с одной позицией в документе?

    @PavelMos
    Так сделать цикл и встроить обработку возможности отсутствия
    Ответ написан
    Комментировать
  • Как записать все значения из столбца B google таблиц в список на Python?

    @PavelMos
    clients = ''.join([str(x) for x in data])
    в начале сказано [test0@gmail.com, test1@gmail.com, ....., а тут в join пусто '', он будет склеивать их в сплошную строку, а не в запятая + пробел
    ", ".join(....
    Ответ написан
    Комментировать
  • Как соединить два массива и вычесть одинаковые элементы?

    @PavelMos
    Проверка на то, что дубли могут быть и в первом, и во втором списке нужна ? Если нужна, нужно делать две прохода:
    a=[1,2,3,4,4,4,1,1,3]
    b=[2,2,5,10,11,3,3]
    out1=[x for x in a if x not in b]
    print ('Из А отсеяно то, что дублируется в  Б', out1)
    out2=[x for x in b if x not in a]
    print ('Из Б отсеяно то, что  дублируется в А', out2)
    print ('Итого',out1+out2)
    Из А отсеяны дубликаты из Б [1, 4, 4, 4, 1, 1]
    Из Б отсеяны дубликаты из А [5, 10, 11]
    Итого [1, 4, 4, 4, 1, 1, 5, 10, 11]
    Ответ написан
    Комментировать
  • Как исправить ошибку 'NoneType' object has no attribute 'chat'?

    @PavelMos
    у объекта message должен быть аттрибут chat, но объект пустой. Проблема или в предыдущем коде, или нужна проверка и заполнение какими-то значениями по умолчанию.
    Ответ написан
  • Как засчитать зацикленность и остановить в таких случаях выполнение кода?

    @PavelMos
    Вставить счётчик перед началом while, в while увеличивать его на 1 и проверять таким образом кол-во циклов на превышение числа повторений
    Ответ написан
    1 комментарий