Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 9, 2023 14:49:21

Salamander174
Зарегистрирован: 2023-06-09
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Обход списка списков и замена в нем float на str

Не могу найти в интернете подходящую информацию, и свои варианты иссякли, может кто знает?
Есть DataFrame Pandas, в нем один столбец с запросами для поисковика типа: “купить дрель 2.4 мм”.
Каждую строку с подобными запросами я разбиваю на отдельные элементы и создаю новый столбец в котором получаются списки. https://skr.sh/sKFdE9dzY4o?a

Далее я применяю функцию которая сравнивает, есть ли в каждом из этих списков определенное слово:https://skr.sh/sKFhGZpFhjg?a

И при проходе цикла он натыкается на дробное число и останавливается, т.к. не может его итерировать:https://skr.sh/sKF7k761n4i?a

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

Офлайн

#2 Июнь 9, 2023 16:18:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

Обход списка списков и замена в нем float на str

А где код сам? Неправильно что-то используешь, раз у тебя функция принимает вещественное число на итерацию.



Офлайн

#3 Июнь 9, 2023 16:26:22

Salamander174
Зарегистрирован: 2023-06-09
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Обход списка списков и замена в нем float на str

py.user.next
А где код сам? Неправильно что-то используешь, раз у тебя функция принимает вещественное число на итерацию.

Применяю через apply https://skr.sh/sKFN81XGayP?a

Вот весь кусок кода, вместо с попыткой пройтись отдельным циклом https://skr.sh/sKFB6zGZ4HH?a

Я пробовал через pythontutor пройтись по шагам, но там можно по списку списков только пройтись(и там все работает). Возможно здесь проблема в том что это DataFrame.

P.S. Вещественное число там действительно есть, в это то и проблема, что мне нужно как-то его в строковый тип превратить или целочисленный, прежде чем начнется его итерация.

Отредактировано Salamander174 (Июнь 9, 2023 16:27:57)

Офлайн

#4 Июнь 9, 2023 19:46:38

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

Обход списка списков и замена в нем float на str

Salamander174
Вопрос, как можно преобразовать эти дробные числа в строки?
  
df['Числа'] = df['Числа'].astype(str)

Офлайн

#5 Июнь 10, 2023 02:26:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

Обход списка списков и замена в нем float на str

Salamander174
Я пробовал через pythontutor пройтись по шагам, но там можно по списку списков только пройтись(и там все работает). Возможно здесь проблема в том что это DataFrame.
В данный момент ты пытаешься сделать что-то вроде этого
  
>>> n = 123.456
>>> 
>>> for i in str(n):
...     print(i)
... 
1
2
3
.
4
5
6
>>>
И в чём здесь сакральный смысл?

Поэтому я тебе и говорю, что если у тебя вещественное число приходит на итерацию, то ты просто что-то не то делаешь. А ты спрашиваешь “а как мне его строкой-то сделать, чтобы я его проитерировать смог?”. Его не надо делать строкой, надо выше там в коде разобраться, как оно пришло вообще туда, куда не должно приходить.



Офлайн

#6 Июнь 11, 2023 19:49:20

Salamander174
Зарегистрирован: 2023-06-09
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Обход списка списков и замена в нем float на str

py.user.next
Я сформулировал более понятное объяснение сути проблемы) Долго вышло.
Суть кода:
>>В каждой строке есть предложение,
>>Код сначала делит эти предложение на отдельные слова.
>>Далее эти слова заносятся в новый столбец списками (list).
>>И в конце он просто проходится по каждому из этих списков и проверяет есть ли в этом списке определенный элемент.
То есть на итерацию цикла даже не заходит вещественное число. И именно эту проблему я и не могу понять и решить.

Офлайн

#7 Июнь 12, 2023 00:28:49

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

Обход списка списков и замена в нем float на str

Salamander174
И именно эту проблему я и не могу понять и решить.
Возьми весь свой код, занеси его в файл с расширением .py и выполняй этот файл в консоли винды.

Тут я писал, как выполнять код на питоне в консоли винды.

После того, как выполнишь эти действия, скинь этот код из файла сюда, оформив его тегами code.
[code python]
тут пишешь свой код, чтобы он получался в белом прямоугольнике
[/code]

И потом мы смотрим, запускаем его у себя, проверяем и говорим тебе, что ты делаешь неправильно.



Отредактировано py.user.next (Июнь 12, 2023 00:29:19)

Офлайн

#8 Июнь 13, 2023 11:36:37

Salamander174
Зарегистрирован: 2023-06-09
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Обход списка списков и замена в нем float на str

py.user.next
Спасибо, не нашел беглым поиском на форуме, как оформлять правильно проблемы с кодом.
Тут я скину обрезанный код до момента ошибки, так как все остальное на это ни как не влияет, да и может сильно нагрузить систему.

И к коду для запуска нужны несколько файлов. Ссылка на google drive: https://drive.google.com/drive/folders/1VaK2ae-2FX5dcKjZEGWOPsjVNZFGP4Xh?usp=sharing


 import pandas as pd
df = pd.read_excel("lakokras.xlsx")
list_city = pd.read_excel("list_city.xlsx", names=['city'])
stop_word = pd.read_excel("stop_word.xlsx", names=['stop_slova'])
list_information = pd.read_excel('list_information_word.xlsx', names=['names'])
def find_stop_words(phrase_for_split):
    for word in stop_word['stop_slova']:
        if word in phrase_for_split:
            return 'stop'
def find_city(phrase_for_split):
    for word in list_city['city']:
        if word in phrase_for_split:
            return 'stop'
df['Фраза_по_словам'] = df['name'].str.split()
df['Содержит_стоп_слово'] = df['Фраза_по_словам'].apply(find_stop_words)
df.drop(df[df['Содержит_стоп_слово'] == 'stop'].index, inplace=True)
df.drop(columns = ['Содержит_стоп_слово', 'Фраза_по_словам'], inplace=True)



Прикреплённый файлы:
attachment klaster_cut.py (1,1 KБ)

Офлайн

#9 Июнь 14, 2023 01:03:52

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

Обход списка списков и замена в нем float на str

Salamander174
И при проходе цикла он натыкается на дробное число и останавливается, т.к. не может его итерировать:https://skr.sh/sKF7k761n4i?a

он натыкается на nan
вот так можете смотреть что не так в функции происходит
  
def find_stop_words(phrase_for_split):
    try:
        for word in stop_word['stop_slova']:
            if word in phrase_for_split:
                return 'stop'
    except:
        print(phrase_for_split)
        print(type(phrase_for_split))

Офлайн

#10 Июнь 14, 2023 12:06:12

Salamander174
Зарегистрирован: 2023-06-09
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Обход списка списков и замена в нем float на str

xam1816
Спасибо больше, буду смотреть где он его находит.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version