twseewx
twseewx

Reputation: 332

How can I combine two csv files into one, by adding one column to the end of the first one?

I simply need to add the column of the second CSV file to the first CSV file.

Example CSV file #1

Time Press RH Dewpt Alt

Value Value Value Value Value

For N number of rows.

Example CSV file #2

SmoothedTemperature

Value

I simply want to make it

Time Press RH Dewpt Alt SmoothedTemperature

Value Value Value Value Value Value

Also one has headers the other does not.

Here is sample code of what I have so far, however the output is the final row of file 1 repeated with the full data set of File #2 next to it.

##specifying what they want to open
File = open(askopenfilename(), 'r')
##reading in the other file

Averaged = open('Moving_Average_Adjustment.csv','r')
##opening the new file via raw input to write to
filename = raw_input("Enter desired filename, EX: YYYYMMDD_SoundingNumber_Time.csv; must end in csv")
New_File = open(filename,'wb')



R = csv.reader(File, delimiter = ',')

## i feel the issue is here in my loop, i don't know how to print the first columns
## then also print the last column from the other CSV file on the end to make it mesh well

Write_New_File = csv.writer(New_File)
    data = ["Time,Press,Dewpt,RH,Alt,AveragedTemp"]
    Write_New_File.writerow(data)
    for i, line in enumerate(R):
        if i <=(header_count + MovingAvg/2):
            continue
    Time,Press,Temp,Dewpt,RH,Ucmp,Vcmp,spd,Dir,Wcmp,Lon,Lat,Ele,Azi,Alt,Qp,Qt,Qrh,Qu,Qv,QdZ=line
for i, line1 in enumerate(Averaged):
    if i == 1:
        continue
    SmoothedTemperature = line1
Calculated_Data = [Time,Press,Dewpt,RH,Alt,SmoothedTemperature]
Write_New_File.writerow(Calculated_Data)

Upvotes: 0

Views: 4824

Answers (1)

Ewharris
Ewharris

Reputation: 164

If you want to go down this path, pandas makes csv manipulation very easy. Say your first two sample tables are in files named test1.csv and test2.csv:

>>> import pandas as pd
>>> test1 = pd.read_csv("test1.csv")
>>> test2 = pd.read_csv("test2.csv")
>>> test3 = pd.concat([test1, test2], axis=1)
>>> test3 
   Time   Press  RH   Dewpt  Alt  SmoothedTemperature
0      1      2    3      4    5                    6

[1 rows x 6 columns]

This new table can be saved to a .csv file with the DataFrame method to_csv.

If, as you mention, one of the files has no headers, you can specify this when reading the file:

>>> test2 = pd.read_csv('test2.csv', header=None)

and then change the header row manually in pandas.

Upvotes: 1

Related Questions