2016-04-02 8 views
1

Ich habe eine Matrix, die nach dem Ausführen einer Korrelation generiert wird - mat = Statistics.corr(result, method="pearson"). Jetzt möchte ich diese Matrix in eine CSV-Datei schreiben, aber ich will Header in die erste Zeile und die erste Spalte der Datei hinzufügen, so dass die Ausgabe wie folgt aussieht:Wie schreibe ich eine Matrix in eine CSV-Datei in Python mit statischen Kopfzeilen in der ersten Zeile und der ersten Spalte hinzufügen?

index,col1,col2,col3,col4,col5,col6 
col1,1,0.005744233,0.013118052,-0.003772589,0.004284689 
col2,0.005744233,1,-0.013269414,-0.007132092,0.013950261 
col3,0.013118052,-0.013269414,1,-0.014029249,-0.00199437 
col4,-0.003772589,-0.007132092,-0.014029249,1,0.022569309 
col5,0.004284689,0.013950261,-0.00199437,0.022569309,1 

Ich habe eine Liste, die die Spalten enthält Namen - colmn = ['col1','col2','col3','col4','col5','col6']. Das index im obigen Format ist eine statische Zeichenfolge, um die Indexnamen anzugeben. Ich schrieb diesen Code aber nur den Header in dem ersten Reihe hinzufügen, aber ich bin nicht in der Lage die Header in der ersten Spalte zu erhalten, wie gut:

with open("file1", "wb") as f: 
     writer = csv.writer(f,delimiter=",") 
     writer.writerow(['col1','col2','col3','col4','col5','col6']) 
     writer.writerows(mat) 

Wie kann ich die Matrix in eine CSV-Datei mit Überschrift statische Header schreiben die erste Reihe und 1. Spalte?

+0

Mögliche Duplikat [Zeilen/Spalten-Header Numpy Matrices hinzufügen] (http://stackoverflow.com/questions/11106536/adding-row-column -headers-to-numpy-Matrizen) –

Antwort

1

Sie könnten pandas verwenden. DataFrame.to_csv() schreibt standardmäßig sowohl die Spaltenüberschriften als auch den Index.

import pandas as pd 
headers = ['col1','col2','col3','col4','col5','col6'] 
df = pd.DataFrame(mat, columns=headers, index=headers) 
df.to_csv('file1') 

Wenn auf der anderen Seite dies keine Option ist, können Sie Ihren Index mit einer wenig Hilfe von enumerate hinzufügen:

with open("file1", "wb") as f: 
    writer = csv.writer(f,delimiter=",") 
    headers = ['col1','col2','col3','col4','col5','col6'] 
    writer.writerow(['index'] + headers) 
    # If your mat is already a python list of lists, you can skip wrapping 
    # the rows with list() 
    writer.writerows(headers[i:i+1] + list(row) for i, row in enumerate(mat)) 
+0

Wenn ich dies verwende, sehe ich einige Werte als leer. Tatsächlich sind einige Werte in meiner 'Matrix'' Nan' und ich denke, das ist der Grund, warum sie beim Schreiben leer werden. Ist es möglich, dass ich "0" schreiben kann, anstatt sie während des Schreibens leer zu halten? – user2966197

+0

Übergeben Sie 'na_rep = '0'' an' to_csv'. –

0

Sie können eine erste Variable verwenden, um die erste Zeile, um anzuzeigen, und fügen sie dann zu der Zeile jede Zeile Namen wie geschrieben steht:

cols = ["col2", "col2", "col3", "col4", "col5"] 

with open("file1", "wb") as f: 
    writer = csv.writer(f) 
    first = True 
    for i, line in enumerate(mat): 
     if first: 
      writer.writerow(["Index"] + cols) 
      first = False 
     else: 
      writer.writerow(["Row"+str(i)] + line) 
Verwandte Themen