Ich habe einen Pandas Datenrahmen voller Tuple (es könnte das gleiche mit Arrays sein) und ich würde gerne alle Spalten in noch mehr Spalten aufteilen (jedes Array oder Tupel hat das gleiche Länge). Nehmen wir dies als Beispiel:Mehrere/alle Spalten eines Pandas Datenrahmens teilen
df=pd.DataFrame([[(1,2),(3,4)],[(5,6),(7,8)]], df.columns=['column0', 'column1'])
die Ausgänge:
column0 column1
0 (1, 2) (3, 4)
1 (5, 6) (7, 8)
Ich habe versucht, hier über diese Lösung zu bauen (https://stackoverflow.com/a/16245109/4218755) Derivate aus dem Ausdruck mit:
df.textcol.apply(lambda s: pd.Series({'feature1':s+1, 'feature2':s-1})
wie
df.column0.apply(lambda s: pd.Series({'feature1':s[0], 'feature2':s[1]})
die Ausgänge:
feature1 feature2
0 1 2
1 5 6
Dies ist das gewünschte Verhalten. Also es funktioniert gut, aber wenn ich zufällig versuchen
df2=df[df.columns].apply(lambda s: pd.Series({'feature1':s[0], 'feature2':s[1]}))
zu verwenden, dann DF2 ist:
colonne0 colonne1
feature1 (1, 2) (3, 4)
feature2 (5, 6) (7, 8)
, die offensichtlich falsch ist. Ich kann nicht auf df anwenden, es gibt das gleiche Ergebnis wie df2 aus.
Wie man solche Splitting-Technik auf einen ganzen Datenrahmen anwenden, und gibt es Alternativen? Dank
gibt, gebe ich die Lösung mit bin näher: df2 = df.applymap (Lambda s: pd.Series ({ 'feat1': s [0], 'feat2': s [ 1]})). Es gibt aus; colonne0 colonne1 0 feat1 1 feat2 2 dtype: int64 feat1 3 feat2 4 dtype: int64 1 feat1 5 feat2 6 dtype: int64 feat1 7 feat2 8 dtype: int64 aber ich bin mit diesem Index stecken (und df2.reset_index funktioniert nicht) –