-2

I am new to python. Please advise me following question.

By using for or while loop, I would like to merge around 200 csv files into a single csv file. Some of csv files with head(5) are like below(Each csv files are 1122 rows * 2 columns).

0sec.csv ID Damage 0 0 2697.5 1 2 1431.7 2 3 2719.3 3 4 345.8 4 5 349.1 1sec.csv ID Damage 0 0 507.1 1 2 0.0 2 3 9644.3 3 4 388.7 4 5 0.0 

My goal is to make a single csv file like below.

total_damage.csv ID 0sec 1sec ~~~ 199sec 200sec 0 0 2697.5 507.1 xxx.x xxx.x 1 2 1431.7 0.0 xxx.x xxx.x 2 3 2719.3 9644.3 xxx.x xxx.x 3 4 345.8 388.7 xxx.x xxx.x 4 5 349.1 0.0 xxx.x xxx.x 

What I've tried

files = sorted(glob.glob('./python/*')) df = pd.DataFrame() for i, f in enumerate(files): file = pd.read_csv(f) file.rename(columns = {'Damage': '{}sec'.format(i)}) df = pd.merge(df, file) df.to_csv('./python/total_Damage.csv', index=False) 

Error message

No common columns to perform merge on. Merge options: left_on=None, right_on=None, left_index=False, right_index=False 

​I would appreciate it if you could teach me current use of pd.merge with loop.

1

1 Answer 1

0

You were almost there. First of all, you are not actually renaming because you missed file= in front of the rename.

Then, to add a column to a dataframe, you simply do df[col]=file[col].

Therefore:

df = pd.DataFrame() for i, f in enumerate(files): file = pd.read_csv(f) file = file.rename(columns = {'Damage': '{}sec'.format(i)}) df['{}sec'.format(i)] = file['{}sec'.format(i)] 

Don't forget to add the id column once before iterating.

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

1 Comment

Thank you very much. I could solve my problem because of your help.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.