I Wahldaten von einer Website bin Schaben und versuchen, es zu speichern, in einem DatenrahmenPython 3.x - ILoc wirft Fehler - "Einzelpositions Indexer ist out-of-bounds"
import pandas as pd
import bs4
import requests
columns = ['Candidate','Party','Criminal Cases','Education','Age','Total Assets','Liabilities']
df = pd.DataFrame(columns = columns)
ind=1
url = requests.get("http://myneta.info/up2007/index.php?action=show_candidates&constituency_id=341")
soup = bs4.BeautifulSoup(url.content)
for content in soup.findAll("td")[16:]:
df.iloc[ind//7,ind%7-1] = content.text
ind=ind+1
print(df)
Im Wesentlichen jede Iteration von content.text liefert mir einen Wert, den ich in der Tabelle auffüllen werde. Die Schleife wird Wert füllen in der folgenden Reihenfolge df -
df[0,0]
df[0,1]
df[0,2]
.
.
.
df[1,0]
df[1,1]
.
.
und so weiter. Leider wirft das Iloc einen Fehler - "ein einzelner Positionsindexer ist außerhalb der Grenzen". Der lustige Teil ist, wenn ich df.iloc[0,0] = content.text
außerhalb der for-Schleife (in einer separaten Zelle für Testzweck) versuchen, funktioniert der Code ordnungsgemäß, aber in der for-Schleife erstellt es einen Fehler. Ich glaube, es könnte etwas trivial sein, aber ich kann nicht verstehen. Bitte helfen
die Zurückverfolgungs einschließen, wenn fragen, warum ein Stück Code funktioniert nicht, wenn Sie bekommen. 'ind% 7-1' erzeugt' -1' für 7, was Sie wahrscheinlich abschrecken wird. Ist Ihr Beispiel abgeschlossen? 'DataFrame.iloc' sollte nicht einmal Daten anhängen können (oder ich habe in Ihrem Beispiel etwas verpasst). –
@ IljaEverilä ich stimme zu, aber das wird passieren, nachdem die for-Schleife 6 Mal ausgeführt wurde. Das Problem ist, dass es nicht einmal läuft. Ich habe eine Logik, um 'ind = 7' zu handhaben, aber um zu dieser Logik zu gelangen, muss 'ind = 1,2 ...' zuerst laufen –
Das Problem besteht immer noch darin, dass 'iloc' nicht in der Lage sein sollte Anhängen an einen 'DataFrame'. Dein 'df' ist anfangs leer. –