2015-08-21 44 views
9

Ich habe eine Datei mit vielen Zeilen. Ich lese jede Zeile, spalte jedes Wort/jede Nummer und speichere sie in einer Liste. Danach versuche ich diese Liste in einen 1-Säulen-Panda-Dataframe umzuwandeln.Liste in einen 1-Spalten-Panda-Datenrahmen konvertieren

Aber nach dem Ausführen meines Codes bekomme ich nur eine Zeile voller Listen. Was ich brauche ist 1 Spalte mit variabler Anzahl von Zeilen mit einem gewissen Wert. Hier

ist der Code-Snippet Ich schrieb:

for line1 in file: 
    test_set=[] 

    test_set.append(next(file).split()) 

    df1 = DataFrame({'test_set': [test_set]}) 

Mein Ausgang ist so etwas wie:

   test_set 
0 [[1, 0, 0, 0, 0, 0, 1, 1, 1, 0]] 

Aber was ich will, ist:

test_set 
0 1 
1 0 
2 0 
3 0 
4 0 
5 0 
6 1 
7 1 
8 1 
9 0 

All Vorschläge was ich bin falsch machen oder wie kann ich das umsetzen? Vielen Dank.

Eingang Datenabtastblock Snippet

id1 id2 id3 id4 
0 1 0 1 
1 1 0 0 

id10 id5 id6 id7 
1 1 0 1 
1 0 0 1 

. 
. 
. 
+1

Können Sie nach, was Ihre Eingangsdaten aussieht, ist es wahrscheinlich, es kann entweder in einem df analysiert oder geteilt werden, die – EdChum

+0

mein neues bearbeiten Überprüfen Sie schneller sein! – HackCode

Antwort

1

herausdrehen musste ich einfach hinzufügen, um dieses

df1 = DataFrame({'test_set': value for value in test_set}) 

Aber ich bin immer noch der Hoffnung, eine weniger kostspielige Antwort zu bekommen, weil dies auch die Komplexität durch einen anderen Faktor erhöhen oder ‚n‘, das ist nicht gut genug.

+0

Dies kann nicht korrekt sein, wenn 'test_set' eine Liste ist. Bitte zeigen Sie, wie 'test_set' aussieht wie – joris

+0

Das sollte in Ordnung sein: df1 = DataFrame ({'test_set': test_set}) – YOBA

11

Sie wollen, dass diese statt:

df1 = DataFrame({'test_set': test_set})

Es gibt keine Notwendigkeit, die Liste wieder in einer anderen Liste zu wickeln, indem Sie, dass Sie Die Angabe Ihrer Daten ist eine Liste mit einem einzelnen Element, das eine andere Liste ist.

EDIT

an den Eingangsdaten suchen Sie können es einfach laden und dann df als eine einzige Säule konstruieren etwa so:

In [134]: 
# load the data 
import io 
import pandas as pd 
t="""id1 id2 id3 id4 
0 1 0 1 
1 1 0 0""" 
df = pd.read_csv(io.StringIO(t), sep='\s+') 
df 

Out[134]: 
    id1 id2 id3 id4 
0 0 1 0 1 
1 1 1 0 0 

nun die df transponieren und eine Liste Verständnis führen, dies wird Ihre Listen erstellen und verketten sie pd.concat mit:

In [142]:  
pd.concat([df.T[x] for x in df.T], ignore_index=True) 

Out[142]: 
0 0 
1 1 
2 0 
3 1 
4 1 
5 1 
6 0 
7 0 
dtype: int64 
+0

Danke für Ihre Antwort, aber jetzt gibt es die gleiche Ausgabe, aber mit nur weniger umklammerten Klammern wie folgt - '0 [1, 0, 0, 0, 0, 0, 1, 1, 1, 0]' – HackCode

+0

Es ist immer noch nur eine Zeile.:/ – HackCode

+0

Was ist, wenn der Datenrahmen nur 1 Zeile und 'n' Spalten haben soll? – FaCoffee

2

Dies sollte in Ordnung sein:

df1 = DataFrame({'test_set': test_set}) 

test_set ist bereits eine Liste, müssen Sie sich nicht über sie zu Schleife, so dass Sie es als ein Wert in Pandas hinzufügen können.

print df1 

test_set 
0 1 
1 0 
2 0 
3 0 
4 0 
5 0 
6 1 
7 1 
8 1 
9 0 
+0

Was ist, wenn der Datenrahmen nur 1 Zeile und' n' Spalten haben soll? – FaCoffee

+0

@ CF84 können Sie eine Beispieleingabe Daten und erwartete Ausgabe bereitstellen .. – YOBA

Verwandte Themen