Seite 1 von 1
Pandas Dataframe: Spalten trennen
Verfasst: Freitag 8. Januar 2021, 16:06
von SyRis
Hallo Zusammen,
dies ist mein erster Eintrag im Forum und ich bin sehr gespannt auf eure Antworten.
Mein Problem bei meinem Python-Projekt ist folgendes:
Ich möchte aus einer Spalte eines Dataframes, welche mehrere Listen enthält, die Listen extrahieren und auf einzelne Spalten aufteilen.
Den Aufbau des Dataframes könnt Ihr euch aktuell so vorstellen, es existiert nur eine große Spalte mit allen Informationen:
0 [[[Gefühlt], [-3 °C]], [[Wind], [12 km/h]], [[Regenwahrscheinlichkeit], [5 %]], ...
1 [[[Gefühlt], [-5 °C]], [[Wind], [15 km/h]], [[Regenwahrscheinlichkeit], [10 %]], ...
2 ...
3 ...
In meinem Wunsch "Dataframe" sind danach drei Spalten Temperatur, Windstärke, Regenwahrscheinlichkeit vorhanden, die ich dann seperat ansteuern und auswerten kann.
Wie kann ich das hinbekommen?
Viele Grüße,
Jonas
Re: Pandas Dataframe: Spalten trennen
Verfasst: Freitag 8. Januar 2021, 16:40
von einfachTobi
Da würde ich zunächst tiefer graben wollen: Wie kommen denn die Daten so in dein DataFrame? Das deutet ja eher darauf hin, dass entweder die Struktur der Daten falsch ist und/oder dieser falsch eingelesen werden. Meist ist es einfacher das zu korrigieren, als es nachträglich zurecht zu biegen.
Re: Pandas Dataframe: Spalten trennen
Verfasst: Freitag 8. Januar 2021, 19:35
von Sirius3
Wie sehen deine Inputdaten wirklich aus und weiter liest du sie im Moment ein?
Re: Pandas Dataframe: Spalten trennen
Verfasst: Sonntag 10. Januar 2021, 15:24
von SyRis
Hallo Sirius, Hallo Tobi,
hier kommen die Daten her, vielleicht habt ihr ja auch eine bessere Idee als den Dataframe, wie ich die Wetterinformationen_Liste filtern und weiterverarbeiten kann.
In der Liste befinden ich alle Wetterdaten für 00:00 - 23:00.
Hier der von mir verwendete relevante Codeabschnitt:
import requests
import pandas as pd
from bs4 import BeautifulSoup, ResultSet
r = requests.get('
https://www.wetter.de/deutschland/wette ... tuell.html')
soup = BeautifulSoup(r.text, 'html.parser')
wetterinformationen_liste: ResultSet = soup.find_all('dl')
df1 = pd.DataFrame(wetterinformationen_liste, columns=['x'])
Da die Große Spalte von meinem Dataframe keine Bezeichnung hatte habe ich Sie erstmal mit X bezeichnet um auf diese zuzugreifen und Sie aufzuteilen.
Aber vielleicht sollte ich auch schon einen anderen Weg wählen, die Daten aus der Wetterinformationen_liste zu filtern.
Ich freue mich auf eure Rückmeldung.
LG
Re: Pandas Dataframe: Spalten trennen
Verfasst: Sonntag 10. Januar 2021, 16:39
von __blackjack__
@SyRis: Du musst dem `DataFrame` beim erstellen schon was geben was der erwartet und nicht irgendwas und hoffen das da vielleicht was sinnvolles raus kommt weil das irgend wann mal in HTML in einer Tabelle stand. Selbst wenn `wetterinformationen_liste` ein passendes ”shape” für eine Tabelle hätte, sind da ja `Tag`-Objekte drin und ich glaube auch irgendwie nicht das Du tatsächlich <dl>-Elemente haben willst, und dann auch noch *alle* auf der *gesamten* Seite. Das ergibt ziemlich sicher keine regelmässig aufgebaute Tabellen wie Du sie für einen `DataFrame` benötigst.
Bevor Du selbst Code dafür schreibst, kannst Du auch erst einmal ausprobieren ob `pandas.read_html()` dazu bewegt werden kann die Tabelle einzulesen. Aber auch da glaube ich bei einem Blick auf die Seite nicht so ganz dran, dazu sind die Daten zu komplex. Da muss ein Mensch mit Grips dran der die Informationen da mittels Code heraus zieht und passend umformt.
Grunddatentypen wie `liste` haben nichts in Namen zu suchen. `r` ist ein schlechter, weil nichtssagender Name. Auch sollte man nach dem Abfragen und vor dem Verfüttern an BeautifulSoup auch den Status der Antwort prüfen, dass man nicht den Körper einer Fehlerantwort parst.