Python,Pandas:将DataFrame的内容写入文本文件


82

我有这样的熊猫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()

但它不起作用。这该怎么做?

Answers:


132

您可以只使用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您必须传递使用追加模式创建的文件句柄。


32

您可以使用pandas.DataFrame.to_csv() ,并同时设置indexheaderFalse

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 可以直接写入文件,有关更多信息,请参阅上面链接的文档。


当需要转义时,这会带来很多麻烦,这不是一般熊猫案件的解决方案!
matanster '18

12

晚会:尝试此>

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

9

当前执行此操作的最佳方法是使用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属性打印的列,可以保留该列,如果需要的话可以使用索引标签,还可以使用其他属性来分隔间距。


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数据获取到文本文件的方法。需要使用熊猫以及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')

我必须将数据框字段(已定界)的内容写为文本文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.