Python добавить данные в пустой pd.Dataframe - PullRequest
1 голос
/ 09 июля 2020

Я новичок в python, я пытаюсь получить данные с веб-сайта и добавить часть веб-страницы в pandas фрейм данных.

Это код, который у меня уже есть, но при добавлении данных в Dataframe появляется сообщение об ошибке.

Полученный код:

url = 'https://oldschool.runescape.wiki/w/Module:Exchange/Anglerfish/Data'
r = requests.get(url)

soup = BeautifulSoup(r.content, 'html.parser')

price_data = soup.find_all('span', class_='s1')
df = pd.DataFrame()

for data in price_data:
  a = pd.DataFrame(data.text.split(":")[0],data.text.split(":")[1])
  df.append(a)

print(df)

Ошибка I Получаю:

ValueError                                Traceback (most recent call last)
<ipython-input-33-963d51917cf2> in <module>()
 10 
 11 for data in price_data:
---> 12   a = pd.DataFrame(data.text.split(":")[0],data.text.split(":")[1])
 13   df.append(a)
 14 

/usr/local/lib/python3.6/dist-packages/pandas/core/frame.py in __init__(self, data, index, columns, dtype, copy)
507                 )
508             else:
--> 509                 raise ValueError("DataFrame constructor not properly called!")
510 
511         NDFrame.__init__(self, mgr, fastpath=True)

ValueError: DataFrame constructor not properly called!

Ответы [ 3 ]

1 голос
/ 09 июля 2020

Кажется, что структура данных, которую вы получаете от data.text.split(":")[0],data.text.split(":")[1], не соответствует тому, что ожидается от функции pd.DataFrame(). Сначала взгляните на документацию функции, чтобы полностью понять, чего ожидать и как правильно передавать ей данные. Вы можете передать словарь с именем столбца и значениями (массивы должны быть одинаковой длины или должен быть указан индекс), или списки / массивы как YOBEN_S предлагается, например:

a = pd.DataFrame({'Column_1':data.text.split(":")[0],'Column_2':data.text.split(":")[1]})

Поскольку вы имеете дело с данными html, вам следует попробовать другой подход, используя pandas.read_html(), который можно прочитать здесь для получения дополнительной информации информация

0 голосов
/ 09 июля 2020

Я провел еще несколько исследований, лучший способ для меня это:

#get data from marketwatch

url = 'https://oldschool.runescape.wiki/w/Module:Exchange/Anglerfish/Data'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
price_data = soup.find_all('span', class_='s1')
df = pd.DataFrame(columns=['timestamp', 'price'])

for data in price_data:
  df = df.append({'timestamp': data.text.split(":")[0], 'price': data.text.split(":")[1]}, ignore_index=True)

print(df)
0 голосов
/ 09 июля 2020

Исправьте код, набрав

pd.DataFrame([[data.text.split(":")[0],data.text.split(":")[1]]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...