Pandas DataFrame transformieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
LuWe2022
User
Beiträge: 1
Registriert: Freitag 21. Januar 2022, 22:02

Hallo Leute,

ich habe in meinem Notebook eine csv.Datei eingelesen und diese als DataFrame gespeichert. Der DataFrame enthält 14 Spalten mit Werten. Ich würde gerne die Werte der einzelnen Spalten untereinander in einer Liste anordnen, sodass bspw. Werte_Spalte 2 unter Werte_Spalte 1 dann Werte_Spalte 3 unter Werte_Spalte 1 usw. Wie lässt sich dies einigermaßen elegant lösen? Hätte da jmd. einen Ansatz für mich?

Cheers Luca
gerr
User
Beiträge: 4
Registriert: Dienstag 25. Januar 2022, 19:14

Hallo Luca,

Du kannst z.B. mit tolist() die Spaltenwerte in eine Liste umwandeln und diese Listen addieren:

Code: Alles auswählen

import pandas as pd

df = pd.DataFrame([["a", "b", "c"], ["d", "e", "f"], ["g", "h","i"]])
print(df)
all_values=[]

for column in df:
    this_column_values = df[column].tolist()
    all_values += this_column_values

one_column_df = pd.DataFrame(all_values)
print(one_column_df)
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Man verwendet keine Schleifen, um über Elemente von Arrays oder DataFrames zu iterieren, sondern verwendet die entsprechenden Funktionen. Hier wird pandas.concat() gesucht.
gerr
User
Beiträge: 4
Registriert: Dienstag 25. Januar 2022, 19:14

Hallo einfachTobi,

auch dann musst Du aber über die Spalten iterieren, es ist also kein Unterschied.

Code: Alles auswählen

import pandas as pd

df = pd.DataFrame([["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]])
print(df)

one_column_df = pd.concat([df.loc[:, i] for i in df.columns], ignore_index=True)
print(one_column_df)
Oder meintest Du etwas anderes?

Gruß,
gerr
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann ist Dir die Eigenschaft als DataFrame eigentlich egal, und Du kannst mit Matrizen arbeiten

Code: Alles auswählen

import pandas as pd

df = pd.DataFrame([["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]])
data = df.as_matrix().ravel()
gerr
User
Beiträge: 4
Registriert: Dienstag 25. Januar 2022, 19:14

Stimmt. Ich war davon ausgegangen dass wieder ein DataFrame zurückgegeben werden soll.
as_matrix ist aber deprecated, besser to_numpy verwenden:

Code: Alles auswählen

import pandas as pd
df = pd.DataFrame([["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]])
data = df.to_numpy().ravel()
print(data)
Sirius3 hat geschrieben: Mittwoch 26. Januar 2022, 10:47 Dann ist Dir die Eigenschaft als DataFrame eigentlich egal, und Du kannst mit Matrizen arbeiten

Code: Alles auswählen

import pandas as pd

df = pd.DataFrame([["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]])
data = df.as_matrix().ravel()
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

gerr hat geschrieben: Mittwoch 26. Januar 2022, 09:03 Hallo einfachTobi,

auch dann musst Du aber über die Spalten iterieren, es ist also kein Unterschied.
Oh, ich dachte, dass es um mehrere DataFrames ginge - sorry, nur überflogen. Die Iteration soll natürlich entfallen.
Dann sollte man eher DataFrame.melt() verwenden.
Antworten