2017-02-22 13 views
3

Ich habe ein wenig Probleme mit einigen Daten in einer Textdatei für die Regressionsanalyse mit Python gespeichert.Wie lese ich Daten aus Textdatei in Array mit Python

Die Daten werden im Format gespeichert, das wie folgt aussehen:

2104,3,399900 1600,3,329900 2400,3,369000 .... 

Ich brauche eine Analyse zu tun wie diese Mittel zu finden: (+ 2104 + 1600 ...) /Anzahl der Daten

Ich denke, die geeigneten Schritte sind, die Daten in Array zu speichern. Aber ich habe keine Ahnung, wie ich es aufbewahre. Ich denke über zwei Möglichkeiten nach, dies zu tun. Die erste ist 3-Array einzustellen, die

a=[2104 1600 2400 ...] b=[3 3 3 ...] c=[399900 329900 36000 ...] 

Der zweite Weg, wie

speichert ist in

zu speichern
a=[2104 3 399900], b=[1600 3 329900] and so on. 

welches ist besser?

Auch, wie man Code schreibt, der die Daten erlaubt, kann in Reihe gespeichert werden? Ich denke an so:

with open("file.txt", "r") as ins: 
array = [] 
elt.strip(',."\'?!*:') for line in ins: 
array.append(line) 

Ist das korrekt?

+3

Bitte geben Sie das Codebeispiel richtig ein. Der beste Weg, dies zu tun ist, kopieren und fügen Sie Ihren Code mit der richtigen Formatierung dann wählen Sie alles und drücken Sie Strg + K –

+1

warum nicht in einer Liste speichern ... '[2104,3,399900 ....]' – depperm

+1

Does Die Datei hat Leerzeichen zwischen den Triplets oder Newlines? – armatita

Antwort

1

Sie verwenden:

with open('data.txt') as data: 
    substrings = data.read().split() 
    values = [map(int, substring.split(',')) for substring in substrings] 
    average = sum([a for a, b, c in values])/float(len(values)) 
    print average 

Mit diesem data.txt,:

2104,3,399900 1600,3,329900 2400,3,369000 
2105,3,399900 1601,3,329900 2401,3,369000 

Es gibt:

2035.16666667 
+0

Vielen Dank. Ihre Antwort ist gut, aber ich habe keine Ahnung über die für Teilzeichenfolge in Teilzeichenfolgen Ist das Variable Wert ein 2d-Arrays? – poonck1

+0

Es ist ein Listenverständnis, mit 3-Element-Listen als Elemente. 'Werte' sind ein 2d-Array, ja. –

+0

Sieht das Array so aus {[2104,3,399900], [1600,3,329900], [2400,3,369000] ...} – poonck1

1

Anstatt mehrere Arrays a, b, c ... zu haben, könnten Sie Ihre Daten als ein Array von Arrays (ein zweidimensionales Array) speichern. Zum Beispiel:

[[2104,3,399900], 
[1600,3,329900], 
[2400,3,369000]...] 

Auf diese Weise müssen Sie nicht mit der dynamischen Benennung Ihrer Arrays befassen. Wie Sie Ihre Daten speichern, d. H. 3 * Array der Länge n oder n * Array der Länge 3 liegt bei Ihnen. Ich würde den zweiten Weg bevorzugen. Um die Daten in Ihr Array einzulesen, sollten Sie die split() Funktion verwenden, die Ihre Eingabe in ein Array aufteilt. Also in Ihrem Fall:

with open("file.txt", "r") as ins: 
    tmp = ins.read().split(" ") 
    array = [i.split(",") for i in tmp] 

>>> array 
[['2104', '3', '399900'], ['1600', '3', '329900'], ['2400', '3', '369000']] 

Edit: den Mittelwert zu finden, zum Beispiel in jeder Liste für das erste Element können Sie folgendes tun:

arraymean = sum([int(i[0]) for i in array])/len(array) 

Wo die 0 in i[0] in jeder Liste das erste Element angibt. Beachten Sie, dass dieser Code List-Verständnis verwendet, das Sie mehr über in this post erfahren können, wenn Sie möchten.

Auch dieser Code speichert die Werte im Array als Zeichenfolgen, daher die Umwandlung in int im Teil, um den Mittelwert zu erhalten.Wenn Sie die Daten als int speichern möchten direkt bearbeiten, nur den Teil im Abschnitt Datei Lesung:

array = [[int(j) for j in i.split(",")] for i in tmp] 
+0

So, wie im nächsten Schritt Daten für die weitere Analyse zu extrahieren? Wie (2104 + 1600 + 2400) um den Mittelwert zu finden? – poonck1

+0

@ poonck1 Ich bearbeitete meine Antwort –

+0

Ich benutze die Len (Array) -Funktion, aber es gibt die Zählung zu 1. Ich weiß, ich habe 47 Datensätze, wie kann ich diese Antwort geben? – poonck1

2

Pandas Verwendung und numpy Sie die Daten in ein Array erhalten können wie folgt:

In [37]: data = "2104,3,399900 1600,3,329900 2400,3,369000" 

In [38]: d = pd.read_csv(StringIO.StringIO(data), sep=',| ', header=None, index_col=None, engine="python") 

In [39]: d.values.reshape(3, d.shape[1]/3) 
Out[39]: 
array([[ 2104,  3, 399900], 
     [ 1600,  3, 329900], 
     [ 2400,  3, 369000]]) 
0

dies eine schnelle Lösung ohne Fehlerprüfung (eine Liste Verständnis Technik, PEP202). Aber wenn Sie Ihre Datei ein konsistentes Format hat, können Sie wie folgt vorgehen:

import numpy as np 

a = np.array([np.array(i.split(",")).astype("float") for i in open("example.txt").read().split(" ")]) 

Sollten Sie es drucken:

print(a) 
print("Mean of column 0: ", np.mean(a[:, 0])) 

Sie werden erhalten die folgenden:

[[ 2.10400000e+03 3.00000000e+00 3.99900000e+05] 
[ 1.60000000e+03 3.00000000e+00 3.29900000e+05] 
[ 2.40000000e+03 3.00000000e+00 3.69000000e+05]] 
Mean of column 0: 2034.66666667 

Beachten Sie, wie, Geben Sie im Code-Snippet den Wert "," als Trennzeichen innerhalb des Triplets und den Bereich " " als Trennzeichen zwischen den Triplets ein. Dies ist der genaue Inhalt der Datei, die ich als Beispiel verwendet habe:

2104,3,399900 1600,3,329900 2400,3,369000 
Verwandte Themen