I have 2 DataFrames
which I would like to merge. I have looked at the documentation and tried to perform the following operation but an getting confused as to how to do it. Like I said I have 2 DataFrames
:
df1: id name type currency 0 BTA.S Applewood Hard GBp 1 VOD.S Softwood Soft GBp
and
df2: id BTA.S 301.221525 VOD.S 213.791400
and I would like to return:
id name type currency price 0 BTA.S Applewood Hard GBp 301.221525 1 VOD.S Softwood Soft GBp 213.791400
Where the price column from the df2 is merged with df1. (Just to let you know there will be alot more wood types by the time I've finished).
I have tried a few methods of doing this:
Result = df1.merge(df2[['*.S']], left_on='id', right_index=True)
where I met the exception:
ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'>
and
Result = pd.concat([Df1, Df2], axis=1, ignore_index=True)
where I get the exception:
ValueError: labels ['type'] not contained in axis
But I am getting confused.
The concat() function can be used to concatenate two Dataframes by adding the rows of one to the other. The merge() function is equivalent to the SQL JOIN clause. 'left', 'right' and 'inner' joins are all possible.
We can use either pandas. merge() or DataFrame. merge() to merge multiple Dataframes. Merging multiple Dataframes is similar to SQL join and supports different types of join inner , left , right , outer , cross .
To use merge() , you need to provide at least below two arguments. for example, combining above two datasets without mentioning anything else like- on which columns we want to combine the two datasets. pd. merge() automatically detects the common column between two datasets and combines them on this column.
To merge two Pandas DataFrame with common column, use the merge() function and set the ON parameter as the column name.
The error message indicates that df2
is of type pd.Series
. You need to convert df2
.to_frame()
as .merge()
needs a pd.DataFrame()
input (see docs):
df1.merge(df2[['*.S']].to_frame(), left_on='id', right_index=True)
while you probably also just could:
df1.merge(df2.to_frame(), left_on='id', right_index=True)
Alternatively, you can use pd.DataFrame.join()
which accepts a pd.Series
.
This error means that one of your objects is not a pandas Data Frame.
ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'>
To prove this to yourself,
print(type(df2))
And that should output pandas.core.series.Series
To achieve your desired result,
df2 = df2.to_frame().reset_index() df2.columns = ['id', 'price'] df1.merge(df2)
Outputs:
id name type currency price 0 BTA.S Applewood Hard GBp 301.221525 1 VOD.S Softwood Soft GBp 213.791400
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With