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

问题描述 投票:0回答:8

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

这是不正确的。如何做到这一点?

python pandas file-io
8个回答
219
投票

您只需使用

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


90
投票

执行此操作的本机方法是使用

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
属性打印哪些列,让您可以保留列、索引标签(如果您愿意),并且具有用于间距等的其他属性。


37
投票

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


18
投票

聚会迟到:试试这个>

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

13
投票

@AHegde - 要获取制表符分隔的输出,请使用分隔符 sep=' '。

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

2
投票

以制表符分隔形式将 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文件,然后将信息转换为文本文件。

根据需要,我们可以使用 for 循环和我们想要在文本文件中的数据类型。


2
投票

我使用了稍微修改过的版本:

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

我必须将数据帧字段(已分隔)的内容写入文本文件。


1
投票

如果您有一个 Dataframe 是 pandas Compare 方法的输出,则打印时这样的数据框如下所示:

    grossRevenue          netRevenue               defaultCost
             self  other         self         other             self  other
2098        150.0  160.0          NaN           NaN              NaN    NaN
2110       1400.0  400.0          NaN           NaN              NaN    NaN
2127          NaN    NaN          NaN           NaN              0.0  909.0
2137          NaN    NaN     0.000000  8.900000e+01              NaN    NaN
2150          NaN    NaN     0.000000  8.888889e+07              NaN    NaN
2162          NaN    NaN  1815.000039  1.815000e+03              NaN    NaN

我希望将整个数据框持久保存到文本文件中,如上面所示。使用 pandas 的

to_csv
或 numpy 的
savetxt
无法实现此目标。我使用普通的旧
print
将其记录到文本文件中:

 with open('file1.txt', mode='w') as file_object:
            print(data_frame, file=file_object)
© www.soinside.com 2019 - 2024. All rights reserved.