我想要合并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
但我感到困惑。对不起,如果这是一个基本问题。任何帮助将非常感激。非常感谢
答案 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的连接系列