合并两个DataFrame

时间:2016-06-22 12:59:04

标签: python pandas numpy

我想要合并2 DataFrames。我查看了文档并尝试执行以下操作,但对如何操作感到困惑。就像我说我有2 DataFrames

df1:

      id        name  type currency
0  BTA.S   Applewood  Hard      GBp
1  VOD.S    Softwood  Soft      GBp

df2:

   id
BTA.S    301.221525
VOD.S    213.791400

我想回来:

      id        name  type currency       price
0  BTA.S   Applewood  Hard      GBp  301.221525
1  VOD.S    Softwood  Soft      GBp  213.791400

df2中的price列与df1合并。 (只是为了让你知道,在我完成的时候会有更多的木材类型。)

我尝试了一些方法:

Result = df1.merge(df2[['*.S']], left_on='id', right_index=True) 

我遇到了例外情况:

ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'>

Result = pd.concat([Df1, Df2], axis=1, ignore_index=True)

我得到例外:

ValueError: labels ['type'] not contained in axis

但我感到困惑。对不起,如果这是一个基本问题。任何帮助将非常感激。非常感谢

4 个答案:

答案 0 :(得分:38)

错误消息表明df2的类型为pd.Series。您需要转换df2 .to_frame(),因为.merge()需要pd.DataFrame()输入(see docs):

df1.merge(df2[['*.S']].to_frame(), left_on='id', right_index=True)

虽然你可能也可以:

df1.merge(df2.to_frame(), left_on='id', right_index=True)

或者,您可以使用接受pd.DataFrame.join()的{​​{1}}。

答案 1 :(得分:4)

此错误表示您的某个对象是一个pandas数据框。

ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'>

要向自己证明这一点,

print(type(df2))

那应输出pandas.core.series.Series

为了达到理想的效果,

df2 = df2.to_frame().reset_index()
df2.columns = ['id', 'price']
df1.merge(df2)

输出:

    id  name    type    currency    price
0   BTA.S   Applewood   Hard    GBp     301.221525
1   VOD.S   Softwood    Soft    GBp     213.791400

答案 2 :(得分:3)

您只需添加df2(系列,而不是DataFrame)作为新列

df['price']=df2

答案 3 :(得分:0)

使用to_frame()或更新您的熊猫;

在新的熊猫版本中接受带有Dataframe的连接系列