Как пропустить значение в циклах без удаления значения в Python - PullRequest
0 голосов
/ 06 февраля 2019

Я занимаюсь поиском в сети, программирую на Python, и я согласен почти со всеми данными.Я создаю кадры данных для связанного анализа.Однако у меня есть проблема со значениями «None» в части списания на некоторых веб-страницах.

На последнем этапе своей работы я могу вырезать детали <span> со значениями цены впетля, как показано ниже.

<span class="abababa">100,00$</span>

и вот мой цикл for, и я использую .text для выхода из <span> частей:

    price=[]
    for i in range(4):
        for j in range(100):
            pr=data[i][j].find('span', class_ = 'abababa')
            price.append(pr.text)
    dPP=pd.DataFrame(price, columns=['Price'])

Примечание: Есть 4 основныхвеб-страницы и каждая страница имеет как минимум 100 значений, которые можно использовать в качестве цены в приведенном выше коде.Вот почему я использовал два вложенных цикла for.

Нет проблем, если в 100 значениях в приведенном выше коде нет значения None.Однако в реальном мире, конечно, есть некоторые значения «Нет» для ценового раздела без какой-либо части <span>.

Как показано ниже:

    <span class="abababa">100,00$</span>
    <span class="abababa">48,00$</span>
    None
    <span class="abababa">100,00$</span>

Я пытался найти решение с помощью оператора if для выхода из значений «None», но в данном случае ниже кода отбрасывает значения «None» в индексе, а мойDataframe получает беспорядок.Например, у меня есть 4 главных веб-страницы и 100 значений, я ожидаю, что у меня будет один столбец данных размером 4x100 = 400 строк.Если у меня всего 10 значений «Нет», мой фрейм данных будет содержать 390 строк.

    price=[]
    for i in range(4):
        for j in range(100):
            pr=data[i][j].find('span', class_ = 'abababa')
            if pr == (None):
                continue
            price.append(pr.text)
    dPP=pd.DataFrame(price, columns=['Price'])

Подводя итог, я не мог заставить его работать без удаления этих значений None в индексе..text также не работает с любыми значениями None.Я получаю 'NoneType' object has no attribute 'text' ошибку.

Не могли бы вы мне помочь?

Ответы [ 4 ]

0 голосов
/ 06 февраля 2019

Не могли бы вы просто использовать оператор if?

for j in range(100):
    if data[i][j] == None:
        price.append(data[i][j])
    else:
        pr=data[i][j].find('span', class_ = 'abababa')
        price.append(pr.text)
0 голосов
/ 06 февраля 2019

Просто добавьте пустую строку, когда pr равен None?

price=[]
for i in range(4):
    for j in range(100):
        pr=data[i][j].find('span', class_ = 'abababa')
        if pr is None:
             price.append("")
             continue
        price.append(pr.text)
dPP=pd.DataFrame(price, columns=['Price'])
0 голосов
/ 06 февраля 2019

Вы можете попробовать следующую модификацию в коде:

price=[]
for i in range(4):
    for j in range(100):
        pr=data[i][j].find('span', class_ = 'abababa')
        if pr == (None):
            price.append(None)
            continue
        price.append(pr.text)
dPP=pd.DataFrame(price, columns=['Price'])
0 голосов
/ 06 февраля 2019

Вы можете просто добавить фиктивное значение к цене, чтобы сохранить ключ -

price=[]
for i in range(4):
    for j in range(100):
        pr=data[i][j].find('span', class_ = 'abababa')
        if pr == (None):
            price.append('dummy-string-when-none-occurs')
            continue
        price.append(pr.text)
dPP=pd.DataFrame(price, columns=['Price'])

Гораздо лучшим способом было бы использование нативных панд, если бы data был кадром данных.Тогда -

price = data['enter-html-col']\
           .apply(lambda x: x.find('span', class_ = 'abababa') if x is not None else x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...