Wert aus Zeile auslesen und als Spalte anhängen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
horatio.cain
User
Beiträge: 3
Registriert: Mittwoch 5. August 2020, 10:03

Hallo zusammen,
ich lerne gerade pandas kennen und hab ein konkretes Problem welches ich nicht gelöst bekomme. Würde mich sehr über Lösungsansätze und ggf. ein paar Tipps freuen:

PROBLEM: Es gibt eine *.csv Datei mit 3 Spalten und einigen Zeilen:

Bild
Bild


WUNSCH:
Nach der Verarbeitung soll die *.csv wie folgt aussehen:
Bild

Ich versuche es mit Pandas zu lösen und lese die Datei in das DataFrame ein.

Code: Alles auswählen

import pandas as pd

df = pd.read_csv("./meinecsv.csv", usecols=(0, 1, 2), sep=";" , decimal="." , encoding="utf-8") 
ff = df.groupby(['Artikelname'],as_index = False).fillna('Y').pivot('Artikelname','Farbe').fillna('x')
Als Ergebnis bekomme ich im Grunde schon das was ich als Wunsch hochgeladen habe.
Allerdings habe ich so meine Zweifel ob der Lösungsansatz richtig ist. Was mich z.B. stört ist das z.B. die Farbe keine "Ganzzahlen" sind.
Gibt es ggf. eine Funktion die mir genau diese Aufgabe abnehmen kann? Sowas wie .mean oder .sum. Leider hab ich nicht passendes in der Doku gefunden.

Ansonsten dachte ich noch über den folgenden Weg nach:

Code: Alles auswählen


with open("./meinecsv.csv") as file:
    for pos in file:
        data = pos.strip().split(",")

data
Bild

So und ab hier fehlt mir leider die richtige Idee :(

Freue mich über jede Anregung. Vielen Dank im voraus.
Sirius3
User
Beiträge: 18219
Registriert: Sonntag 21. Oktober 2012, 17:20

pd.read_csv ist schon korrekt, und Du kannst den Typ der einzelnen Spalten als Argument übergeben. Schau einfach mal in die Dokumentation.
horatio.cain
User
Beiträge: 3
Registriert: Mittwoch 5. August 2020, 10:03

Hallo Sirius3,
Sirius3 hat geschrieben: Mittwoch 5. August 2020, 12:13 pd.read_csv ist schon korrekt, und Du kannst den Typ der einzelnen Spalten als Argument übergeben. Schau einfach mal in die Dokumentation.
das klappt, zumindest das Einlesen und sieht nun wie folgt aus:

Code: Alles auswählen

import pandas as pd
df = pd.read_csv("./meinecsv.csv", sep=",", decimal="." , encoding="utf-8", dtype = {"Farbe" : "int", "Menge" : "int"}) 
df.info()
Bild

Die Pivotzeile wurde optimiert und sieht nun wie folgt aus:

Code: Alles auswählen

ff = df.pivot(index='Refnummer', columns='Filiale')['Bestand'].fillna('x')
Bild

Allerdings wenn ich den Pivot mache, geht die Formatierung wieder verloren.
Sprich aus int32 wird wieder float. Auch wenn ich explizit nochmal den dtype festlege?

Code: Alles auswählen

df.Farbe = df.Farbe.astype(int)
df.Menge = df.Menge.astype(int)
df.to_csv("./meineneuecsv.csv", sep=';', header=True, index=True)
Es steht bei Menge auf 1.0 statt 1.

Hab ich gerade etwas Grundliegendes nicht auf dem Schirm?
Vielen Dank im voraus.
Antworten