2017-05-10 5 views
3

ich eine Python Pandas Datenrahmen df haben:Pandas - Spaltenwerte in eine Liste in einer neuen Spalte kombinieren

d=[['hello',1,'GOOD','long.kw'], 
    [1.2,'chipotle',np.nan,'bingo'], 
    ['various',np.nan,3000,123.456]]              
t=pd.DataFrame(data=d, columns=['A','B','C','D']) 

, die wie folgt aussieht:

print(t) 
     A   B  C  D 
0 hello   1 GOOD long.kw 
1  1.2 chipotle NaN bingo 
2 various  NaN 3000 123.456 

Ich versuche, eine neue Spalte zu erstellen Dies ist ein list der Werte in A, B, C und . So würde es so aussehen:

t['combined']            

Out[125]: 
0  [hello, 1, GOOD, long.kw] 
1  [1.2, chipotle, nan, bingo] 
2  [various, nan, 3000, 123.456] 
Name: combined, dtype: object 

ich diesen Code versuche:

t['combined'] = t.apply(lambda x: list([x['A'], 
             x['B'], 
             x['C'], 
             x['D']]),axis=1)  

Welche diesen Fehler zurückgibt:

ValueError: Wrong number of items passed 4, placement implies 1 

Was mir ist rätselhaft, wenn entfernen Sie eine der Spalten, die ich in die Liste einfügen möchte (oder eine weitere Spalte zum Dataframe hinzufügen, die ich NICHT zur Liste hinzufüge), funktioniert mein Code.

Zum Beispiel dieses Code ausführen:

t['combined'] = t.apply(lambda x: list([x['A'], 
             x['B'], 
             x['D']]),axis=1)  

gibt diese, die perfekt ist, wenn ich nur die drei Spalten gesucht:

print(t) 
     A   B  C  D     combined 
0 hello   1 GOOD long.kw  [hello, 1, long.kw] 
1  1.2 chipotle NaN bingo [1.2, chipotle, bingo] 
2 various  NaN 3000 123.456 [various, nan, 123.456] 

ich bei einem vollständigen Verlust bin, warum die anfragende ' Eine kombinierte Liste aller Spalten im Datenframe würde einen Fehler erzeugen, aber alle bis auf eine Spalte auswählen, um die "kombinierte" Liste zu erstellen, und die Liste wird wie erwartet erstellt.

+0

Ich bin immer noch verwirren, warum Ihr Ansatz nicht funktioniert, obwohl –

+0

ein Fehler – clg4

Antwort

6

versuchen Sie dies:

t['combined']= t.values.tolist() 

t 
Out[50]: 
     A   B  C  D      combined 
0 hello   1 GOOD long.kw  [hello, 1, GOOD, long.kw] 
1  1.20 chipotle NaN bingo [1.2, chipotle, nan, bingo] 
2 various  NaN 3000 123.46 [various, nan, 3000, 123.456] 
+0

sein muss, wenn ich richtig bin, t.values ​​ist die numpy Array-Darstellung des Datenrahmen ohne die Header . Numpy-Arrays haben das Member tolist(), um eine (möglicherweise verschachtelte) Liste zurückzugeben. – johnml1135

+1

Sie sind richtig, aber @ clg4 Ansatz sollte funktionieren, könnte es ein Fehler sein –

+0

Schöne und einfache Lösung! +1 – Vaishali

Verwandte Themen