2016-10-11 4 views
0

ich eine Datei, die wie folgt aussieht - http://pastebin.com/u1A7v1CVLesen Sie eine Textdatei in einen Pandas Datenrahmen oder numpy Array

Es ist nur eine Stichprobe von zwei Zeilen aus einer Datei. Die Zeilen enthalten word_label_id, gefolgt von freq. Zum Beispiel word_label_id 1237 1 Mal in der ersten Reihe tritt, 1390 tritt 1 Mal und so weiter ...

ich diese spärliche Darstellung verwenden müssen, aber ich bin nicht in der Lage es zu einem DataFrame zu konvertieren oder andere nutzbar Format.

Edit: Ich weiß, dass Pandas eine read_csv Methode hat, wo ich ein Leerzeichen als Trennzeichen verwenden kann. Dies ist nicht ideal, da ich zwei Trennzeichen benötige - eines zwischen word_label_id und freq und ein anderes Trennzeichen zwischen diesem Paar und dem nächsten.

Antwort

0

Ok, es ist nicht ideal, aber Sie können Notepad ++ verwenden.

Es hatte eine „Suchen und Ersetzen“ -Funktion und Sie können \ t ersetzen Tabs als \ n

Dann können Sie einen Makro aufzeichnen, sich zu bewegen auf einer gegebenen Strecke zu den vorherigen, das Überspringen Linien verwenden.

Dann können Sie Pandas, pd.from_csv verwenden, aber Sie haben Begrenzer als Registerkarten definieren statt Kommas

Eine weitere Option ist es, jede Zeile zu lesen und zu verarbeiten getrennt. Im Grunde eine while-Schleife mit der Bedingung m_line wird nicht == null

dann innerhalb der Schleife, spaltet die Zeichenfolge oben mit str.split()

und einem anderen Schleife hat, die einen Wörterbuch macht, für jede Zeile. Am Ende hätten Sie eine Liste von Wörterbüchern, wo jeder Eintrag ID ist: Frequenz

+0

Ich brauche zwei verschiedene Trennzeichen - eine zwischen dem 'word_label_id' und' freq', die einen Raum und eine andere zwischen * dieser * sein kann ('word_label_id',' freq') Kombination und die nächste. – boltthrower

+0

Das Aufzeichnen eines Makros in Notepad ++ könnte das Problem lösen, aber ich habe dies als Wiki-Antwort hinterlassen, da ich viele Details ausgelassen habe. –

+0

* "... Tabs ersetzen als \ n" * Ich lade die Datei herunter. Es enthält keine Registerkarten. –

0

Haben Sie versucht, mit jedem Element separat zu arbeiten?

Zum Beispiel:

Dokument öffnen:

with open('delimiters.txt') as r: 
    lines = r.readlines() 
    linecontent = ' '.join(lines) 

eine Liste für jedes Element erstellen:

result = linecontent.replace(' ', ',').split(',') 

erstellen sublist für ids und freqs:

newResult = [result[x:x+2] for x in range(0, len(result), 2)] 

Arbeits mit jeder Daten Typ:

ids = [x[0][:] for x in newResult] 
freq = [x[1][:] for x in newResult] 

erstellen Datenrahmen

df = pandas.DataFrame({'A ids': ids, 'B freq': freq}) 

enter image description here

+0

Ja. Ich habe dies mit 'read_csv' gemacht und dann eine Split-Methode auf die Spalte angewendet, die mir mehrere Spalten mit NaN gibt, weil die Länge jeder Zeile variiert. – boltthrower

+0

'read_csv' mit' sep = '' 'oder sogar' sep = '\ n'' ergibt * NaN * -Elemente. Das Arbeiten mit 'readlines()' könnte diese Elemente vermeiden. – estebanpdl

0

was hier habe ich getan. Dies erstellt ein Wörterbuch mit den Schlüssel-Wert-Paaren aus jeder Zeile.

data = [] 

with open('../data/input.mat', 'r') as file: 
    for i, line in enumerate(file): 
     l = line.split() 
     d = dict([(k, v) for k, v in zip(l[::2], l[1::2])]) 
     data.append(d) 
Verwandte Themen