2017-03-20 3 views
1

Ich habe einen Datenrahmen mit einer seiner Spalte mit einer Liste bei jedem Index. Ich möchte diese Listen in einer Liste verketten. Ich bin mitWie pandas Spalte mit Listenwerten in einer Liste verketten?

ids = df.loc[0:index, 'User IDs'].values.tolist() 

Dies führt jedoch in ['[1,2,3,4......]'], die eine Zeichenfolge ist. Irgendwie ist jeder Wert in meiner Listenspalte vom Typ str. Ich habe versucht, mit list(), literal_eval() konvertieren, aber es funktioniert nicht. Die list() wandelt jedes Element innerhalb einer Liste in eine Zeichenfolge, z. von [12,13,14...] bis ['['1'',','2',','1',',','3'......]'].

Wie pandas Spalte mit Listenwerten in einer Liste verketten? Bitte helft mir, ich haue mir stundenlang den Kopf darauf.

Antwort

1

betrachten die Datenrahmen df

df = pd.DataFrame(dict(col1=[[1, 2, 3]] * 2)) 
print(df) 

     col1 
0 [1, 2, 3] 
1 [1, 2, 3] 

pandas einfachste Antwort

df.col1.sum() 

[1, 2, 3, 1, 2, 3] 

numpy.concatenate

np.concatenate(df.col1) 

array([1, 2, 3, 1, 2, 3]) 

chain

from itertools import chain 

list(chain(*df.col1)) 

[1, 2, 3, 1, 2, 3] 

Reaktion auf die Kommentare:
Ich denke, Ihre Spalten Strings sind

from ast import literal_eval 

df.col1 = df.col1.apply(literal_eval) 

Wenn stattdessen Ihre Spalte String-Werte, die

wie Listen sehen ist
df = pd.DataFrame(dict(col1=['[1, 2, 3]'] * 2)) 
print(df) # will look the same 

     col1 
0 [1, 2, 3] 
1 [1, 2, 3] 

jedoch pd.Series.sum tut nicht gleich funktionieren.

df.col1.sum() 

'[1, 2, 3][1, 2, 3]' 

Wir brauchen die Saiten zu bewerten, als ob sie Literale sind und dann sum

df.col1.apply(literal_eval).sum() 

[1, 2, 3, 1, 2, 3] 
+0

Vielen Dank. Die erste Methode ist am einfachsten, aber wie verwende ich sie, wenn ich einige erste Listen anstelle aller Listen in der Spalte verketten möchte? Ich hatte schon np ausprobiert. Verketten(), aber ich habe das gleiche wie ['[1,2,3 ...]']. – SarwatFatimaM

+0

@SarwatFatimaM Sie können mehrere Dinge tun. Versuchen Sie 'df.col1.iloc [: 3] .sum()' um nur die ersten 3 zu kombinieren. – piRSquared

+0

Ja, ich habe es ausprobiert: 'ids = pd.DataFrame (GCM.loc [0: 2, 'User IDs ']) ' ' ids = uninstall_ids [' User IDs ']. Sum() 'Aber das Problem ist der Typ is str, der das Problem weiter im Programm verursacht. Wenn ich list() oder tolist() verwende, konvertiert es [12,13,14,15] in etwas wie ['[' 1 ',', ',' 2 ',', ',' 1 ',', ','3'...]']. Ich brauche das, um eine Liste zu sein, wie ich counter() von Ansammlungen verwende, um mit zwei Listen später im Programm zu vergleichen.Ich habe auch 'df.col1.iloc [: 3] .sum()' ausprobiert, aber dasselbe Problem. – SarwatFatimaM

0

Wenn Sie die Liste dies pythonic Weg glätten wollen, es zu tun:

Import Pandas als pd

df = pd.DataFrame({'A': [[1,2,3], [4,5,6]]}) 

a = df['A'].tolist() 
a = [i for j in a for i in j] 
print a 
+0

Aber dies ergibt etwas wie das ['[', '1', '2', ',', '', '4', '2', ',', '', '4', '9' , '2', ',', '', '1' .........] ']. – SarwatFatimaM

Verwandte Themen