2016-03-22 12 views
1

Ich habe eine Eingabedatei, die Daten wie folgt enthält:Lesung aus mehreren Listen in eine Pandas Dataframe

[ABCD,color,NORMAL,N,2015-02-20,1] 
[XYZA,color,NORMAL,N,2015-05-04,1] 
[GFFD,color,NORMAL,N,2015-07-03,1] 
[NAAS,color,NORMAL,N,2015-08-26,1] 
[LOWW,color,NORMAL,N,2015-09-26,1] 
[KARA,color,NORMAL,N,2015-11-08,1] 
[ALEQ,color,NORMAL,N,2015-12-04,1] 
[VDDE,color,NORMAL,N,2015-12-23,1] 
[QWER,color,NORMAL,N,2016-01-18,1] 
[KDSS,color,NORMAL,Y,2015-08-29,1] 

ich eine Variable erstellt haben, die die Spaltennamen speichert table_columns sagen. Wie kann ich dies in einen Pandas Dataframe konvertieren?

Sollte dem Lesen aus mehreren Listen sehr ähnlich sein, aber die Anzahl der Listen, aus denen es liest, ist n.

+0

Das Datenformat scheint ungewöhnlich: ohne die eckigen Klammern, es wäre eine einfache csv sein Datei, die Pandas ohne Probleme lesen können. Gibt es einen Grund, warum Ihre Datendatei eckige Klammern enthält? – egpbos

+0

Ja, die Daten stammen von Sparks mapPartition-Methode für ein Schlüssel/Wert-PaarRDD. Es speichert die Daten als Schlüssel und Liste. Ich benutze nur den Wert für die Nachbearbeitung. –

Antwort

2

können Sie versuchen, read_csv mit strip und to_datetime:

import pandas as pd 
import io 

temp=u"""[ABCD,color,NORMAL,N,2015-02-20,1] 
[XYZA,color,NORMAL,N,2015-05-04,1] 
[GFFD,color,NORMAL,N,2015-07-03,1] 
[NAAS,color,NORMAL,N,2015-08-26,1] 
[LOWW,color,NORMAL,N,2015-09-26,1] 
[KARA,color,NORMAL,N,2015-11-08,1] 
[ALEQ,color,NORMAL,N,2015-12-04,1] 
[VDDE,color,NORMAL,N,2015-12-23,1] 
[QWER,color,NORMAL,N,2016-01-18,1] 
[KDSS,color,NORMAL,Y,2015-08-29,1]""" 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp),header=None,names=['a','b','c','d','e','f']) 

#remove [] 
df['a'] = df['a'].str.strip('[') 
df['f'] = df['f'].str.strip(']') 
#convert column e to datetime 
df['e'] = pd.to_datetime(df['e']) 
print df 
     a  b  c d   e f 
0 ABCD color NORMAL N 2015-02-20 1 
1 XYZA color NORMAL N 2015-05-04 1 
2 GFFD color NORMAL N 2015-07-03 1 
3 NAAS color NORMAL N 2015-08-26 1 
4 LOWW color NORMAL N 2015-09-26 1 
5 KARA color NORMAL N 2015-11-08 1 
6 ALEQ color NORMAL N 2015-12-04 1 
7 VDDE color NORMAL N 2015-12-23 1 
8 QWER color NORMAL N 2016-01-18 1 
9 KDSS color NORMAL Y 2015-08-29 1 
+0

Ich denke, das ist eine bessere Antwort. –

+0

@Abhinav Bhardwaj Wie funktioniert es? Wenn meine Antwort hilfreich war, dann vergiss nicht [accept] (oder http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) oder die Lösung von Ami Tavory. Vielen Dank. – jezrael

+0

:-) Wenn Sie eines der beiden akzeptieren - es sollte dieses sein. –

1

Eine Möglichkeit, dies zu tun wäre:

from StringIO import StringIO 

import pandas as pd 

>>> pd.read_csv(StringIO(open('stuff.txt').read().replace('[', '').replace(']', '')), header=None) 
    D color NORMAL N 2015-02-20 1 
0 XYZA color NORMAL N 2015-05-04 1 
1 GFFD color NORMAL N 2015-07-03 1 
2 NAAS color NORMAL N 2015-08-26 1 
3 LOWW color NORMAL N 2015-09-26 1 
4 KARA color NORMAL N 2015-11-08 1 
5 ALEQ color NORMAL N 2015-12-04 1 
6 VDDE color NORMAL N 2015-12-23 1 
7 QWER color NORMAL N 2016-01-18 1 
8 KDSS color NORMAL Y 2015-08-29 1 
+0

Ah, danke!

Verwandte Themen