Python, Pandas: записать содержимое DataFrame в текстовый файл

84

У меня есть pandas DataFrame вроде этого

        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   

Я хочу записать эти данные в текстовый файл, который выглядит так:

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

Я пробовал что-то вроде

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

но это не работает. Как это сделать?

Соунак
источник

Ответы:

140

Вы можете просто использовать np.savetxtи получить доступ к атрибуту np .values:

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

дает:

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

или to_csv:

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

Обратите внимание, что np.savetxtвам нужно будет передать дескриптор файла, созданный в режиме добавления.

EdChum
источник
32

Вы можете использовать pandas.DataFrame.to_csv () и установить оба параметра indexи headerна 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 может писать в файл напрямую, для получения дополнительной информации вы можете обратиться к документации, указанной выше.

Анзель
источник
это вызовет много проблем, когда нужно будет сбежать, это не решение общего случая Pandas!
Matanster
13

Поздно на вечеринку: попробуйте это>

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
Это не дает текстовый файл с разделителями табуляции, кажется, выводит файл с разделителями пробелами. Мне нравится элегантность этого кода, есть ли способ сделать табуляцию вывода разделенной?
AHegde
10

На данный момент лучший способ сделать это - использовать df.to_string():

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

Будет выведено следующее

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

Этот метод также позволяет вам легко выбирать, какие столбцы печатать с columnsатрибутом, позволяет вам сохранить столбец, индексировать метки, если вы хотите, и имеет другие атрибуты для интервала и т. Д.

johnDanger
источник
1

@AHegde - чтобы получить вывод с разделителями табуляции, используйте разделитель sep = '\ t'.

Для df.to_csv:

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

Для np.savetxt:

np.savetxt(r'c:\data\np.txt', df.values, fmt='%d', delimiter='\t')
Манохар Рана
источник
1

Способ переноса данных Excel в текстовый файл в виде с разделителями табуляцией. Необходимо использовать Pandas, а также 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)

Нам нужно сначала сгенерировать файл xlsx с отфильтрованными данными, а затем преобразовать информацию в текстовый файл.

В зависимости от требований мы можем использовать \ n \ t для циклов и типа данных, которые мы хотим в текстовом файле.

Бхарат Бхушан
источник
0

Я использовал немного измененную версию:

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

Мне пришлось записать содержимое поля фрейма данных (которое было разделено) в виде текстового файла.

Бхаскаран Мани
источник