2017-10-09 1 views
-2

ich ein Beispiel haben ein ähnliches Format-Datei zu analysieren:
Daten Beispiel (.data):Der Versuch, eine .dat-Datei und speichert bis zu 2-D-Array in Pandas zu analysieren

+ Naoki Abe 
- Myriam Abramson 
+ David W. Aha 
+ Kamal M. Ali 
- Eric Allender 

Und hier ist die python Beispiel für den Shop des Code in einen 2D-Array:

df = pd.read_csv(
    filepath_or_buffer='path/to/.data/file', 
    header=None, 
    sep=',') 

# separate names from classes 
vals = df.loc[:,:].values 
names = [n[0][2:] for n in vals] 
cls = [n[0][0] for n in vals] 

Von meinem Verständnis, der python-Code bedeutet, dass die Daten df variabel sein und extrahiert die String-Daten mit jeder Person zugeordnet ist, in dem vals Variable. Und dann teilt es die Strings vals in names und cls. Die Listen names und cls sollten diese Komponenten enthalten, so dass sich der Name der i-ten Person in names[i] und der zugehörigen Klasse in cls[i] befindet.

Wenn ich jedoch auf ähnliche Weise verwenden will einen ähnlichen Datensatz (.dat) zu analysieren,

-1 this is comment1 blah blah blah (it is a big paragraph) 
-1 this is comment2 blah blah blah (it is a big paragraph) 
-1 this is comment3 blah blah blah (it is a big paragraph) 

Deshalb hat ich modifiziertes Beispiel sein wie:

# read in the dataset 
df = pd.read_csv(
    engine='python', 
    filepath_or_buffer='data/Pro1/train.dat', 
    header=None, 
    sep='\t+') 

# separate names from classes 
vals = df.loc[:,:].values 
comm = [n[0][2:] for n in vals] 
rates = [n[:1][0] for n in vals] 

ich eine Fehlermeldung anzeigt Nachricht: TypeError: 'long' object has no attribute '__getitem__' um comm = [n[0][2:] for n in vals]
Ich suchte nach der Fehlermeldung, es erklärte, dass es bedeutet, dass ich versuchte, ein int in Zeichenfolge (?) zu speichern. Ich versuche, den gesamten Absatz des Kommentars zu speichern, und es ist eine Zeichenfolge. Und in dem Beispiel speicherte es eine Zeichenfolge mit Namen in Ordnung. Eine andere Frage, die ich habe, ist, da ich eine .dat Datei zu analysieren hatte, ich vermute, es TAB hinter -1 statt Raum ist, bin ich nicht sicher, ob der Bereich der Array Ich habe richtig **

Meine Erfahrung.: Ich bin kein Experte von Python, wie Sie wahrscheinlich gedacht haben, kann ich definitiv den Code lesen, aber muss forschen, während ich es schreibe. Python ist derzeit meine einzige Wahl, um solche Daten zu analysieren.

Antwort

0

In der ersten Datei sind keine Kommatrennzeichen vorhanden, daher führt jede Zeile in der Datei zu einer einzelnen Zeichenfolge, z. B. '+ Naoki Abe'. Folglich können Sie die Zeichenfolge, die die Namen von den restlichen Zeichenfolgen trennt, verwenden.

Ich vermute auch, dass es ein Tab-Zeichen gibt, das die -1 vom Rest jeder Zeile trennt. Das Ergebnis ist, dass Pandas jede Zeile auf der Registerkarte aufteilt. In diesem Fall können Sie die Zeichenfolge nicht mehr verwenden, nachdem Sie die Registerkarte als Trennzeichen deklariert haben.

>>> df2 = pd.read_csv('temp2.csv', engine='python', header=None, sep='\t') 
>>> vals2 = df2.loc[:,:].values 
>>> vals2 
array([[-1, 'this is comment1 blah blah blah (it is a big paragraph)'], 
     [-1, 'this is comment2 blah blah blah (it is a big paragraph)'], 
     [-1, 'this is comment3 blah blah blah (it is a big paragraph)']], dtype=object) 
>>> first = [val[0] for val in vals2] 
>>> first 
[-1, -1, -1] 
>>> second = [val[1] for val in vals2] 
>>> second 
['this is comment1 blah blah blah (it is a big paragraph)', 'this is comment2 blah blah blah (it is a big paragraph)', 'this is comment3 blah blah blah (it is a big paragraph)'] 

Aber verzweifeln Sie nicht!

Es gibt eine Möglichkeit, dass beide Datendateien auf ähnliche Weise behandelt werden können.

Verwenden Sie sep='\s+', so dass Registerkarten und Leerzeichen ähnlich behandelt werden. Dann verwandeln Pandas jede Zeile in eine Liste von Strings. Alles, was Sie jetzt tun müssen, ist, den ersten Gegenstand abzuholen und die anderen zusammenzusetzen.

>>> df3 = pd.read_csv('temp2.csv', engine='python', header=None, sep='\s+') 
>>> vals3 = df3.loc[:,:].values 
>>> vals3 
array([[-1, 'this', 'is', 'comment1', 'blah', 'blah', 'blah', '(it', 'is', 
     'a', 'big', 'paragraph)'], 
     [-1, 'this', 'is', 'comment2', 'blah', 'blah', 'blah', '(it', 'is', 
     'a', 'big', 'paragraph)'], 
     [-1, 'this', 'is', 'comment3', 'blah', 'blah', 'blah', '(it', 'is', 
     'a', 'big', 'paragraph)']], dtype=object) 
>>> first = [val[0] for val in vals3] 
>>> first 
[-1, -1, -1] 
>>> second = [' '.join(val[1:]) for val in vals3] 
>>> second 
['this is comment1 blah blah blah (it is a big paragraph)', 'this is comment2 blah blah blah (it is a big paragraph)', 'this is comment3 blah blah blah (it is a big paragraph)'] 

Meine letzte Bemerkung: Ich Frage Ihre Verwendung von Pandas über das CSV-Modul.

Verwandte Themen