70

I have a list of 18 data frames:

dfList = [df1, df2, df3, df4, df5, df6.....df18]

All of the data frames have a common id column so it's easy to join them each together with pd.merge 2 at a time. Is there a way to join them all at once so that dfList comes back as a single dataframe?

1
  • could you elaborate on the looping option? sounds like what I'd be looking for Commented Aug 16, 2016 at 15:02

1 Answer 1

119

I think you need concat, but first set index of each DataFrame by common column:

dfs = [df.set_index('id') for df in dfList]
print pd.concat(dfs, axis=1)

If need join by merge:

from functools import reduce
df = reduce(lambda df1,df2: pd.merge(df1,df2,on='id'), dfList)
Sign up to request clarification or add additional context in comments.

2 Comments

pd.concat(dfList, axis=1) combined them all, but each df had it's own line (so every id was repeated 18 times)
I tried to write as variable: sdf = pd.concat(dfs, axis=1) and got TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame" Don't get it.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.