Reputation: 21971
# df is dataframe, f_out is a text file I am outputting to
for index, row in df.iterrows():
f_out.write(('%6d%4d%4d'+6*'%6.2f'+'\n') %
(row['year'],row['month'],row['day'],
row['sr'],row['tma'],row['tmi'],
row['apc'],row['rhu'],row['wnd']))
I would like to output a dataframe to a text file that is formatted as:
1979 1 1 3.19 12.51 17.61 1.40 0.77 6.89
How do I do this without iterating through all rows using iterrows? That approach is really slow
--EDIT:
Sample dataframe is here: https://www.dropbox.com/s/d109fvj1higo88b/7_9.csv?dl=0
small snippet here:
air.2m ap day month rhu sr swr_diff tma tmi apc wnd year
1/1/1979 -20.9 0.0 1.0 1.0 0.8 2.3 26.3 -16.1 -20.9 73.4 4.8 1979
1/2/1979 -25.2 0.0 2.0 1.0 0.8 2.2 25.2 -18.6 -25.2 70.6 4.4 1979
1/3/1979 -26.2 0.0 3.0 1.0 0.8 2.5 29.4 -16.4 -26.2 82.1 4.7 1979
1/4/1979 -25.6 0.0 4.0 1.0 0.8 2.0 23.6 -16.1 -25.6 66.2 4.5 1979
1/5/1979 -29.6 0.0 5.0 1.0 0.8 2.8 32.2 -19.0 -29.6 88.1 3.4 1979
1/6/1979 -24.6 0.0 6.0 1.0 0.8 2.7 31.2 -15.7 -24.6 85.3 4.5 1979
1/7/1979 -22.8 0.0 7.0 1.0 0.9 2.6 30.5 -16.0 -22.8 84.1 3.4 1979
1/8/1979 -24.0 0.0 8.0 1.0 0.8 2.6 29.9 -14.2 -24.0 81.9 4.1 1979
1/9/1979 -19.0 0.0 9.0 1.0 0.9 2.8 32.6 -14.4 -19.0 87.8 3.2 1979
1/10/1979 -20.9 0.0 10.0 1.0 0.8 2.4 28.0 -16.5 -20.9 77.1 2.1 1979
1/11/1979 -24.2 3.1 11.0 1.0 0.8 2.2 25.0 -12.8 -24.2 73.4 3.1 1979
1/12/1979 -14.5 1.7 12.0 1.0 0.9 1.8 20.7 -11.1 -14.5 63.0 2.4 1979
1/13/1979 -16.9 6.3 13.0 1.0 0.9 1.9 22.5 -12.3 -16.9 69.6 7.2 1979
Upvotes: 4
Views: 8467
Reputation: 4310
You can reorder the columns in a few ways. One is to just manually assign column names when outputting.
use_cols=['year','month','day',...other columns]
When you write the file, use the to_string method. It will save things in the evenly spaced format you want. See here.
with open('filename.txt','w') as outfile:
df.to_string(outfile,columns=use_cols)
If you need to format individual columns with specific float or string formats, you can do something like this. See here.
df['cost'] = df['cost'].map('${:,.2f}'.format)
Upvotes: 6