2015-07-06 7 views
27

Ich habe Pandas Datenrahmen wie diesePython, Pandas: schreiben Inhalt von Datenrahmen in eine Textdatei

 X Y Z Value 
0  18 55 1  70 
1  18 55 2  67 
2  18 57 2  75  
3  18 58 1  35 
4  19 54 2  70 

ich diese Daten in eine Textdatei auf diese Weise schreiben wollen,

18 55 1 70 
18 55 2 67 
18 57 2 75  
18 58 1 35 
19 54 2 70 

Ich habe versuchte so etwas wie

f = open(writePath, 'a') 
f.writelines(['\n', str(data['X']), ' ', str(data['Y']), ' ', str(data['Z']), ' ', str(data['Value'])]) 
f.close() 

aber es funktioniert nicht. wie geht das?

Antwort

39

Sie können nur np.savetxt verwenden und Zugriff auf die np Attribut .values:

np.savetxt(r'c:\data\np.txt', df.values, fmt='%d') 

ergibt:

18 55 1 70 
18 55 2 67 
18 57 2 75 
18 58 1 35 
19 54 2 70 

oder to_csv:

df.to_csv(r'c:\data\pandas.txt', header=None, index=None, sep=' ', mode='a') 

Hinweis für np.savetxt Sie haben würde übergeben Sie ein Dateihandle, das cr war mit Append-Modus.

+1

wenn ich 'np.savetxt', ich glaube, die Textdatei doesnt offen in' append' Modus. Wenn ich 'np.savetxt' zweimal verwende, werden die vorherigen Daten gelöscht. Gibt es eine Möglichkeit, diese Funktion mehrmals zu verwenden, um die gleiche Datei auszugeben? – Sounak

+0

Es gibt einen 'Modus' Parameter. 'df.to_csv (r'c: \ data \ pandas.txt ', header = Keine, index = Keine, mode =' a ', sep =' ')' funktioniert – Sounak

+0

Ja, ich hätte den Kwargs 'Modus hinzufügen sollen 'param – EdChum

12

Sie können pandas.DataFrame.to_csv() verwenden und sowohl index und header-False Einstellung:

In [97]: print df.to_csv(sep=' ', index=False, header=False) 
18 55 1 70 
18 55 2 67 
18 57 2 75 
18 58 1 35 
19 54 2 70 

pandas.DataFrame.to_csv in eine Datei direkt schreiben können, für weitere Informationen Sie die Dokumentation oben verlinkten verweisen.

+0

Sie müssen angeben, sep = ''', um zu bekommen, was das OP wünscht – EdChum

+0

@EdChum, danke jetzt korrigiert. Ich habe nicht genug Aufmerksamkeit geschenkt :) – Anzel

+0

Danke Anzel – Sounak

5

spät zur Party: Versuchen Sie, diese>

#pd: your pandas dataframe 
base_filename = 'Values.txt' 
with open(os.path.join(WorkingFolder, base_filename),'w') as outfile: 
    pd.to_string(outfile) 
#Neatly allocate all columns and rows to a .txt file 
+1

Dies gibt keine durch Tabulatoren getrennte Textdatei, scheint eine durch Leerzeichen getrennte Datei auszugeben. Ich mag die Eleganz dieses Codes. Gibt es eine Möglichkeit, den Ausgabekanal zu begrenzen? – AHegde

Verwandte Themen