Фрейм данных Pandas показывает только одну строку, когда она должна показывать несколько

#python #pandas #selenium

Вопрос:

Мой код таков

 from bs4 import BeautifulSoup
import pandas as pd

soup = BeautifulSoup(wd.page_source)
items = soup.find("div", {"class": "items-grid-view"})

rows_processed=[]
for item in items.findAll("div", {"class": "item-cell"}):
    itemTitle = item.find("a", {"class": "item-title"})
    itemPromo = item.find("p", {"class": "item-promo"})
    row = []
    
    row.append(itemTitle.text)
    if (itemPromo and itemPromo.text == "OUT OF STOCK"):
        row.append("Sold Out")
    else: 
        row.append("Available")

        
rows_processed.append(row)

df = pd.DataFrame.from_records(rows_processed, columns=["Item Title ", "Status"])

display(df)
 

Когда я запускаю ячейку, она показывает мне только последний элемент в таблице, когда должно быть показано 12 элементов. Не важно, что я использую панд, но я хотел бы научиться, поэтому я надеюсь, что есть решение.

Комментарии:

1. В вашем цикле у вас есть row = [] , поэтому вы каждый раз удаляете все, что у вас есть, с этим пустым списком. Только в последний раз оно остается значением, затем только это значение добавляется в rows_processed.

Ответ №1:

rows_processed.append(row) У вас был внешний цикл for, так что на самом деле вы просто добавляли последнюю строку. Также pd.DataFrame.from_records может быть справедливым pd.DataFrame .

 from bs4 import BeautifulSoup
import pandas as pd

soup = BeautifulSoup(wd.page_source)
items = soup.find("div", {"class": "items-grid-view"})

rows_processed=[]
for item in items.findAll("div", {"class": "item-cell"}):
    itemTitle = item.find("a", {"class": "item-title"})
    itemPromo = item.find("p", {"class": "item-promo"})
    row = []
    
    row.append(itemTitle.text)
    if itemPromo and itemPromo.text == "OUT OF STOCK":
        row.append("Sold Out")
    else: 
        row.append("Available")

    rows_processed.append(row)
        

df = pd.DataFrame(rows_processed, columns=["Item Title ", "Status"])

print(df)