Python, Pandas: Schreiben Sie den Inhalt von DataFrame in eine Textdatei


82

Ich habe Pandas DataFrame wie diesen

        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 möchte diese Daten in eine Textdatei schreiben, die so aussieht:

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

Ich habe so etwas versucht

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 macht man das?

Antworten:


132

Sie können einfach np.savetxtdas np-Attribut verwenden und darauf zugreifen .values:

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

Ausbeuten:

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')

Beachten np.savetxtSie, dass Sie ein Dateihandle übergeben müssen, das im Append-Modus erstellt wurde.


32

Sie können mit pandas.DataFrame.to_csv () , und beide Einstellung indexund headerzu False:

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 Sie können direkt in eine Datei schreiben. Weitere Informationen finden Sie in den oben verlinkten Dokumenten.


Dies wird in große Schwierigkeiten geraten, wenn es zu einer Flucht kommen muss. Es ist nicht die Lösung für den allgemeinen Pandas-Fall!
Matanster

11

Spät zur Party: Versuchen Sie dies>

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

2
Dies ergibt keine durch Tabulatoren getrennte Textdatei, sondern scheint eine durch Leerzeichen getrennte Datei auszugeben. Ich mag die Eleganz dieses Codes. Gibt es eine Möglichkeit, die Registerkarte "Ausgabe" abzugrenzen?
AHegde

9

Der derzeit beste Weg, dies zu tun, ist df.to_string():

with open(writePath, 'a') as f:
    f.write(
        df.to_string(header = False, index = False)
    )

Gibt Folgendes aus

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

Mit dieser Methode können Sie auch einfach auswählen, welche Spalten mit dem columnsAttribut gedruckt werden sollen, die Spalte beibehalten, Beschriftungen indizieren, wenn Sie dies wünschen, und andere Attribute für den Abstand ect haben.


1

@AHegde - Um die tabulatorgetrennte Ausgabe zu erhalten, verwenden Sie das Trennzeichen sep = '\ t'.

Für df.to_csv:

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

Für np.savetxt:

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

1

Möglichkeit, Excel-Daten in tabulatorgetrennter Form in eine Textdatei zu übertragen. Müssen Pandas sowie xlrd verwenden.

import pandas as pd
import xlrd
import os

Path="C:\downloads"
wb = pd.ExcelFile(Path+"\\input.xlsx", engine=None)
sheet2 = pd.read_excel(wb, sheet_name="Sheet1")
Excel_Filter=sheet2[sheet2['Name']=='Test']
Excel_Filter.to_excel("C:\downloads\\output.xlsx", index=None)
wb2=xlrd.open_workbook(Path+"\\output.xlsx")
df=wb2.sheet_by_name("Sheet1")
x=df.nrows
y=df.ncols

for i in range(0,x):
    for j in range(0,y):
        A=str(df.cell_value(i,j))
        f=open(Path+"\\emails.txt", "a")
        f.write(A+"\t")
        f.close()
    f=open(Path+"\\emails.txt", "a")
    f.write("\n")
    f.close()
os.remove(Path+"\\output.xlsx")
print(Excel_Filter)

Wir müssen zuerst die xlsx-Datei mit gefilterten Daten generieren und dann die Informationen in eine Textdatei konvertieren.

Abhängig von den Anforderungen können wir \ n \ t für Schleifen und Datentypen verwenden, die in der Textdatei enthalten sein sollen.


0

Ich habe eine leicht modifizierte Version verwendet:

with open(file_name, 'w', encoding = 'utf-8') as f:
    for rec_index, rec in df.iterrows():
        f.write(rec['<field>'] + '\n')

Ich musste den Inhalt eines Datenrahmenfeldes (das begrenzt war) als Textdatei schreiben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.