Python, Pandas: escriba el contenido de DataFrame en un archivo de texto


82

Tengo pandas DataFrame como este

        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   

Quiero escribir estos datos en un archivo de texto que se ve así:

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

He intentado algo como

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

pero no funciona. ¿Como hacer esto?

Respuestas:


132

Puede usar np.savetxty acceder al atributo np .values:

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

rinde:

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

o bien to_csv:

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

Tenga en cuenta np.savetxtque tendría que pasar un identificador de archivo que se haya creado con el modo de adición.


32

Puede usar pandas.DataFrame.to_csv () y configurar ambos indexy headerpara 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 puede escribir en un archivo directamente, para obtener más información, puede consultar los documentos vinculados anteriormente.


esto generará muchos problemas cuando sea necesario escapar, ¡no es la solución para el caso general de Pandas!
matanster

12

Tarde para la fiesta: prueba esto>

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
Esto no da un archivo de texto delimitado por tabulaciones, parece generar un archivo delimitado por espacios. Me gusta la elegancia de este código, ¿hay alguna forma de delimitar la pestaña de salida?
AHegde

9

La mejor manera actual de hacer esto es usar df.to_string():

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

Producirá lo siguiente

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

Este método también le permite elegir fácilmente qué columnas imprimir con el columnsatributo, le permite mantener la columna, las etiquetas de índice si lo desea, y tiene otros atributos para el espaciado, etc.


1

@AHegde: para obtener la salida delimitada por tabulaciones, use el separador sep = '\ t'.

Para df.to_csv:

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

Para np.savetxt:

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

1

Manera de obtener datos de Excel en un archivo de texto en forma delimitada por tabulaciones. Necesita usar Pandas y xlrd.

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)

Primero debemos generar el archivo xlsx con datos filtrados y luego convertir la información en un archivo de texto.

Dependiendo de los requisitos, podemos usar \ n \ t para bucles y el tipo de datos que queremos en el archivo de texto.


0

Usé una versión ligeramente modificada:

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

Tuve que escribir el contenido de un campo de marco de datos (que estaba delimitado) como un archivo de texto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.