Python, Pandas : write content of DataFrame into text File

I have pandas DataFrame like this

        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

I want to write this data to a text file that looks like this:

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

I have tried something like

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

but it’s not working. How to do this?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

You can just use np.savetxt and access the np attribute .values:

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

yields:

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

or to_csv:

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

Note for np.savetxt you’d have to pass a filehandle that has been created with append mode.

Method 2

The native way to do this is to use df.to_string() :

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

Will output the following

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

This method also lets you easily choose which columns to print with the columns attribute, lets you keep the column, index labels if you wish, and has other attributes for spacing ect.

Method 3

You can use pandas.DataFrame.to_csv(), and setting both index and header to 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 can write to a file directly, for more info you can refer to the docs linked above.

Method 4

Late to the party: Try this>

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

Method 5

@AHegde – To get the tab delimited output use separator sep=’t’.

For df.to_csv:

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

For np.savetxt:

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

Method 6

Way to get Excel data to text file in tab delimited form.
Need to use Pandas as well as 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)

We need to first generate the xlsx file with filtered data and then convert the information into a text file.

Depending on requirements, we can use n t for loops and type of data we want in the text file.

Method 7

I used a slightly modified version:

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

I had to write the contents of a dataframe field (that was delimited) as a text file.

Method 8

If you have a Dataframe that is an output of pandas compare method, such a dataframe looks like below when it is printed:

    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

I was looking to persist the whole dataframe into a text file as its visible above. Using pandas’s to_csv or numpy’s savetxt does not achieve this goal. I used plain old print to log the same into a text file:

 with open('file1.txt', mode='w') as file_object:
            print(data_frame, file=file_object)


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x