0

I am currently using this code:

import pandas as pd
AllDays = ['a','b','c','d']
TempDay = pd.DataFrame( np.random.randn(4,2) ) 
TempDay['Dates'] = AllDays
TempDay.to_csv('H:\MyFile.csv', index = False, header = False)

But when it prints it prints the array before the dates with a header row. I am seeking to print the dates before the TemperatureArray and no header rows.

Edit: The file is with the TemperatureArray followed by Dates: [ TemperatureArray, Date].

-0.27724356949570034,-0.3096554106726788,a
-0.10619546908708237,0.07430127684522048,b
-0.07619665345406437,0.8474460146082116,c
0.19668718143436803,-0.8072994364484335,d

I am looking to print: [ Date TemperatureArray]

a,-0.27724356949570034,-0.3096554106726788
b,-0.10619546908708237,0.07430127684522048
c,-0.07619665345406437,0.8474460146082116
d,0.19668718143436803,-0.8072994364484335

1 Answer 1

2

The pandas.Dataframe.to_csv method has a keyword argument, header=True that can be turned off to disable headers.

However, it sometimes does not work (from experience). Using it in conjunction with index=False should solve your issue.

For example, this snippet should fix your issue:

TempDay.to_csv('C:\MyFile.csv', index=False, header=False)

Here is a full example showing how it disables the header row:

>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame(np.random.randn(6,4))
>>> df
          0         1         2         3 
0  1.295908  1.127376 -0.211655  0.406262 
1  0.152243  0.175974 -0.777358 -1.369432 
2  1.727280 -0.556463 -0.220311  0.474878 
3 -1.163965  1.131644 -1.084495  0.334077 
4  0.769649  0.589308  0.900430 -1.378006 
5 -2.663476  1.010663 -0.839597 -1.195599 

>>> # just assigns sequential letters to the column
>>> df[4] = [chr(i+ord('A')) for i in range(6)]
>>> df
          0         1         2         3  4
0  1.295908  1.127376 -0.211655  0.406262  A
1  0.152243  0.175974 -0.777358 -1.369432  B
2  1.727280 -0.556463 -0.220311  0.474878  C
3 -1.163965  1.131644 -1.084495  0.334077  D
4  0.769649  0.589308  0.900430 -1.378006  E
5 -2.663476  1.010663 -0.839597 -1.195599  F

>>> # here we reindex the headers and return a copy
>>> # using this form of indexing just requires you to provide
>>> # a list with all the columns you desire and in the order desired
>>> df2 = df[[4, 1, 2, 3]]
>>> df2
   4         1         2         3
0  A  1.127376 -0.211655  0.406262
1  B  0.175974 -0.777358 -1.369432
2  C -0.556463 -0.220311  0.474878
3  D  1.131644 -1.084495  0.334077
4  E  0.589308  0.900430 -1.378006
5  F  1.010663 -0.839597 -1.195599

>>> df2.to_csv('a.txt', index=False, header=False)
>>> with open('a.txt') as f:
...     print(f.read())
... 
A,1.1273756275298716,-0.21165535441591588,0.4062624848191157
B,0.17597366083826546,-0.7773584823122313,-1.3694320591723093
C,-0.556463084618883,-0.22031139982996412,0.4748783498361957
D,1.131643603259825,-1.084494967896866,0.334077296863368
E,0.5893080536600523,0.9004299653290818,-1.3780062860066293
F,1.0106633581546611,-0.839597332636998,-1.1955992812601897

If you need to dynamically adjust the columns, and move the last column to the first, you can do as follows:

# this returns the columns as a list
columns = df.columns.tolist()
# removes the last column, the newest one you added
tofirst_column = columns.pop(-1)
# just move it to the start
new_columns = [tofirst_column] + columns

# then you can the rest
df2 = df[new_columns]

This simply allows you to take the current column list, construct a Python list from the current columns, and reindex the headers without having any prior knowledge on the headers.

Sign up to request clarification or add additional context in comments.

7 Comments

Thanks for the suggestion. The bigger problem is that it prints the dates after the TemperatureArray but I need Dates before the TemperatureArray.
Can you provide a small sample? I thought you were mainly looking to turn off the headers. It will be a little bit hard to debug unless you can provide a small Dataframe as an example.
Or are you just looking for chronological "before", all the dates that occurred before the dates in the temperature array).
I updated the code above to show what I am looking for. Thanks
Edited and I do exactly that: I use column re-ordering in Pandas to return a copy of the dataframe, which we then dump to file without the headers.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.