Транспонирование таблицы при чистке полотна с селеном - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь собирать данные с веб-страниц с нескольких страниц. Проблема в том, что я хочу переместить столбцы в строки, чтобы получить очищенные данные в виде DataFrame.

Я проверил этот вопрос и применил его к моему python коду, но он не работал должным образом.

Вот мой код ниже:

browser.get('https://fortune.com/global500/2019/walmart') 

data =[]

i = 1
while True:
    table = browser.find_element_by_css_selector('tbody')
    if i > 2:
        break
    try:
        print("Scraping Page no. " + str(i))
        i = i + 1

        for row in table.find_elements_by_css_selector('tr'):
            cols =  [cell.text for cell in row.find_elements_by_css_selector('td.dataTable__value--3n5tL.dataTable__valueAlignLeft--3uvNx')]
            colsT = data.append(np.array(cols).T.tolist())

        try:
            WebDriverWait(browser, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a > span.singlePagination__icon--2KbZn"))).click()
            time.sleep(3)

        except TimeoutException:
            break

    except Exception as e:
        print(e)
        break

data1 = pd.DataFrame(data)
print(data1)

Вот вывод кода, который я запускаю:

Scraping Page no. 1
Scraping Page no. 2
                          0
0       C. Douglas McMillon
1                 Retailing
2     General Merchandisers
3         Bentonville, Ark.
4                         -
5                        25
6                 2,200,000
7              Dai Houliang
8                    Energy
9        Petroleum Refining
10                  Beijing
11                        -
12                       21
13                  619,151

И вот как я хочу, чтобы он был:

0    C. Douglas McMillon   Retailing   General Merchandisers    Bentonville, Ark.    -  ...
1    Dai Houliang          Energy      Petroleum Refining       Beijing              -  ...

Любые предложения или исправления будут ценится здесь.

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Вы можете напрямую добавить список значений в виде строки во фрейм данных. У меня установлены конкретные столбцы, и список добавляется в фрейм данных, соответствующий этим столбцам.

browser.get('https://fortune.com/global500/2019/walmart') 

data =[]
df = pd.DataFrame(columns = ['c1', 'c2', 'c3', 'c4', 'c5','c6','c7'])

i = 1
while True:
    table = browser.find_element_by_css_selector('tbody')
    if i > 2:
        break
    try:
        print("Scraping Page no. " + str(i))
        i = i + 1
        values =[]

        for row in table.find_elements_by_css_selector('tr'):
            value = ([cell.text for cell in row.find_elements_by_css_selector('td.dataTable__value--3n5tL.dataTable__valueAlignLeft--3uvNx')])
            values.append(value)
        print(values)
        s = pd.Series(values,index=df.columns)
        df = df.append(s,ignore_index=True)

        try:

            WebDriverWait(browser, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a > span.singlePagination__icon--2KbZn"))).click()
            time.sleep(3)

        except TimeoutException:
            break



    except Exception as e:
        print(e)
        break


print(df)

browser.quit()

Вывод:

                      c1           c2  ...    c6           c7
0  [C. Douglas McMillon]  [Retailing]  ...  [25]  [2,200,000]
1         [Dai Houliang]     [Energy]  ...  [21]    [619,151]
0 голосов
/ 03 марта 2020

Вы можете использовать Pandas функцию транспонирования :

df_transposed = data1.T

Выход:

0    C. Douglas McMillon   Retailing   General Merchandisers    Bentonville, Ark.    -  ...
1    Dai Houliang          Energy      Petroleum Refining       Beijing              -  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...