панды, объединяющие 300 фреймов данных

1

Цель этого кода

  1. Очистите 300 столов через Pandas и Beautiful Soup
  2. Объединение этих таблиц в один кадр данных. Код работает отлично для первого шага. Но он не работает во втором.

Вот код:

import pandas as pd
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup


header = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 " "Safari/537.36", "X-Requested-With": "XMLHttpRequest"}
url = open(r"C:\Users\Sayed\Desktop\script\links.txt").readlines()

for site in url:
    req = Request(site, headers=header)
    page = urlopen(req)
    soup = BeautifulSoup(page, 'lxml')

    table = soup.find('table')
    df = pd.read_html(str(table), parse_dates={'DateTime': ['Release Date', 'Time']}, index_col=[0])[0]
    df = pd.concat(df, axis=1, join='outer').sort_index(ascending=False)
    print(df)

Вот ошибка:

Traceback (последний последний вызов):

Файл "D: /Projects/Tutorial/try.py", строка 18, в

df = pd.concat(df, axis=1, join='outer').sort_index(ascending=False)

Файл "C:\Users\Sayed\Anaconda3\lib\site-packages\pandas\core\reshape\concat.py", строка 225, в concat copy = copy, sort = sort)

Файл "C:\Users\Sayed\Anaconda3\lib\site-packages\pandas\core\reshape\concat.py", строка 241, в init

'"{name}"'.format(name=type(objs).__name__))

TypeError: первый аргумент должен быть итерабельным из объектов pandas, вы передали объект типа "DataFrame

Теги:
pandas
beautifulsoup

1 ответ

3
Лучший ответ

Функция concat Pandas принимает последовательность или отображение объектов Series, DataFrame или Panel в качестве первого аргумента. В настоящее время ваш код передает один DataFrame.

Я подозреваю, что следующая проблема исправит вашу проблему:

import pandas as pd
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup


header = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 " "Safari/537.36", "X-Requested-With": "XMLHttpRequest"}
url = open(r"C:\Users\Sayed\Desktop\script\links.txt").readlines()

dfs = []

for site in url:
    req = Request(site, headers=header)
    page = urlopen(req)
    soup = BeautifulSoup(page, 'lxml')

    table = soup.find('table')
    df = pd.read_html(str(table), parse_dates={'DateTime': ['Release Date', 'Time']}, index_col=[0])[0]
    dataframes.append(df)

concat_df = pd.concat(dfs, axis=1, join='outer').sort_index(ascending=False)
print(df)

Все, что я сделал, это создать список, называемый dfs, в качестве места для добавления ваших DataFrames во время итерации по сайтам. Затем dfs передается как аргумент concat.

  • 1
    спасибо человеку за помощь, но код вызывает еще одну ошибку, и она связана с датой. TypeError: Невозможно сравнить тип 'Timestamp' с типом 'str'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню