Python, Pandas: ghi nội dung của DataFrame vào tệp văn bản


82

Tôi có DataFrame gấu trúc như thế này

        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   

Tôi muốn ghi dữ liệu này vào một tệp văn bản giống như sau:

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

Tôi đã thử một cái gì đó như

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

nhưng nó không hoạt động. làm như thế nào?

Câu trả lời:


132

Bạn chỉ có thể sử dụng np.savetxtvà truy cập thuộc tính np .values:

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

sản lượng:

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

hoặc to_csv:

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

Lưu ý cho np.savetxtbạn là bạn phải chuyển một bộ xử lý tệp đã được tạo với chế độ nối thêm.


32

Bạn có thể sử dụng pandas.DataFrame.to_csv () và đặt cả hai indexheaderthành 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 có thể ghi trực tiếp vào tệp, để biết thêm thông tin, bạn có thể tham khảo các tài liệu được liên kết ở trên.


điều này sẽ gặp rất nhiều rắc rối khi cần phải trốn thoát, nó không phải là giải pháp cho trường hợp gấu trúc nói chung!
matanster

12

Đến muộn bữa tiệc: Hãy thử cái này>

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
Điều này không tạo ra tệp văn bản được phân cách bằng tab, dường như xuất ra tệp được phân cách bằng dấu cách. Tôi thích sự sang trọng của mã này, có cách nào để làm cho tab đầu ra được phân định không?
AHegde

9

Cách tốt nhất hiện tại để làm điều này là sử dụng df.to_string():

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

Sẽ xuất như sau

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

Phương pháp này cũng cho phép bạn dễ dàng chọn các cột để in với columnsthuộc tính, cho phép bạn giữ lại cột, nhãn chỉ mục nếu bạn muốn và có các thuộc tính khác cho khoảng cách vv.


1

@AHegde - Để lấy đầu ra được phân tách bằng tab, hãy sử dụng dấu phân tách sep = '\ t'.

Đối với df.to_csv:

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

Đối với np.savetxt:

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

1

Cách đưa dữ liệu Excel vào tệp văn bản ở dạng phân cách bằng tab. Cần sử dụng Pandas cũng như 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)

Trước tiên, chúng ta cần tạo tệp xlsx với dữ liệu được lọc và sau đó chuyển đổi thông tin thành tệp văn bản.

Tùy thuộc vào yêu cầu, chúng tôi có thể sử dụng \ n \ t cho các vòng lặp và loại dữ liệu chúng tôi muốn trong tệp văn bản.


0

Tôi đã sử dụng một phiên bản sửa đổi một chút:

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

Tôi phải viết nội dung của trường khung dữ liệu (đã được phân tách) dưới dạng tệp văn bản.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.