Pandas Tabelle

SDsda

Cadet 2nd Year
Dabei seit
Nov. 2019
Beiträge
16
Hallo Community,
Ich versuche eine Tabelle mittels pd.read_html zu bekommen.
Hier ein Bsp. mit Proteinpulver:

Python:
import pandas as pd

url = "https://www.fitmart.de/Eiweisspulver/ESN-Fruity-Whey-Isolate-1000g.html"
page = pd.read_html(url)
print(page)
Code:
 Nährwerte (alle Geschmacksrichtungen*)    pro 30 g Pulver    pro 100 g Pulver
0                              Brennwerte  456 kJ / 109 kcal  1519 kJ / 364 kcal
1                                    Fett            < 0,1 g             < 0,1 g
2             davon gesättigte Fettsäuren            < 0,1 g             < 0,1 g
3                           Kohlenhydrate             0,34 g                 1 g
4                            davon Zucker            < 0,1 g               0,3 g
5                                 Protein               27 g                90 g
6                                    Salz            < 0,1 g             < 0,1 g
7                                     NaN                NaN                 NaN
8              *Nährwerte Fresh Pineapple    pro 30 g Pulver    pro 100 g Pulver
9                              Brennwerte  456 kJ / 109 kcal  1519 kJ / 364 kcal
10                                   Fett            < 0,1 g             < 0,1 g
11            davon gesättigte Fettsäuren            < 0,1 g             < 0,1 g
12                          Kohlenhydrate             0,34 g                 1 g
13                           davon Zucker            < 0,1 g               0,3 g
14                                Protein             26,7 g                89 g
15                                   Salz            < 0,1 g             < 0,1 g
Wie ist es möglich "Nährwerte" und "(alle Geschmacksrichtungen*)" getrennt in eine einzelne Spalte zu schreiben Oder "pro 30 g" und "Pulver" ?
LG
 

commandertabel

Cadet 4th Year
Dabei seit
Nov. 2011
Beiträge
112
Möglich ist es sicher, kp obs da ne schnelle Variante gibt. Ich würde einfach ein neues DataFrame mit den richtigen Columns machen und dann die Daten vom alten reinkopieren. Für mich stellt sich nur die Frage was dann z.B in "(alle Geschmacksrichtungen*)" reinsoll?
 

Hörbört

Cadet 3rd Year
Dabei seit
Dez. 2018
Beiträge
43
Deine Frage finde ich etwas verwirrend.
"Nährwerte (alle Geschmacksrichtungen*)" ist der Name einer einzelnen Spalte. Da gibts nichts zu trennen, da darunter ja auch nur ein Eintrag pro Zelle ist.

Meinst du nicht eher beide Abschnitte der Tabelle in verschiedene DataFrames zu trennen?

das würde so gehen:
Python:
import pandas as pd

url = "https://www.fitmart.de/Eiweisspulver/ESN-Fruity-Whey-Isolate-1000g.html"
page = pd.read_html(url)
df = page[0]

df1 = df.loc[0:7]
df2 = df.loc[9:]
df2.columns= df.loc[8].values
 

SDsda

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Nov. 2019
Beiträge
16
Danke für eure Antworten. Ja, ich möchte den Namen der einzelnen Spalte, quasi die Überschrift, trennen.
Ergänzung ()

@commandertabel
In "(alle Geschmacksrichtungen*)" soll das gleich rein, wie in "Nährwerte", aber das spielt erstmal keine Rolle. Mein Anliegen s.o.
Ergänzung ()

Ich hätte an sowas gedacht


Python:
df['Nährwerte'], df['(alle Geschmacksrichtungen*)'] =  df['Nährwerte (alle Geschmacksrichtungen*)'].split('(alle Geschmacksrichtungen*)')
 
Zuletzt bearbeitet:

commandertabel

Cadet 4th Year
Dabei seit
Nov. 2011
Beiträge
112
die überschriften kriegst du z.B. mit headers = list(df.columns.values) als Liste. Dann kannst du jeweiligen Elemente der Liste so bearbeiten und deine Strings splitten und neu in die Liste einfügen. Und am Ende machst du ein neues DataFrame mit den alten Werten also in etwa
DataFrame([df['Nährwerte (alle Geschmacksrichtungen*)'].values,df['Nährwerte (alle Geschmacksrichtungen*)'].values,...],columns=headers)
 
Top