панды, объединяющие 300 фреймов данных - PullRequest
0 голосов
/ 21 сентября 2018

Назначение этого кода:

  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

1 Ответ

0 голосов
/ 21 сентября 2018

Функция Pandas concat принимает последовательность или отображение объектов 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...