将dict中的数据帧与Python中的另一个数据帧合并

时间:2017-03-31 15:39:19

标签: python python-2.7 pandas

我有一个dict,目前看起来像这样:

raw_data = {'Series_Date':['2017-03-10','2017-03-10','2017-03-10','2017-03-13','2017-03-13','2017-03-13'],'Value':[1,1,1,1,1,1],'Type':['SP','1M','3M','SP','1M','3M'],'Desc':['Check SP','Check 1M','Check 3M','Check SP','Check 1M','Check 3M']}
import pandas as pd
df1= pd.DataFrame(raw_data,columns=['Series_Date','Value','Type','Desc'])
dict = {}
dict = {'Check':df1}
print dict

我试图将附加的df附加到此dict的df元素,例如:

appended_data = {'Series_Date':['2017-03-13','2017-03-13','2017-03-13'],'Value':[1,1,1],'Type':['SP','1M','3M'],'Desc':['Check SP','Check 1M','Check 3M']}
import pandas as pd
appended = pd.DataFrame(appended_data,columns=['Series_Date','Value','Type','Desc'])
print appended

adfs = {k:df.merge(appended[appended.Desc==df.Desc],on=['Series_Date'],how='left',suffixes=['','_Appended']) for (k,df) in dict.items()}

但是,在运行此merge语句时,我收到以下错误:ValueError:只能比较带有相同标记的Series对象

尝试阅读这个错误,但不确定它是如何适用的,任何想法可以做些什么来克服这个错误,或者另一种做法

2 个答案:

答案 0 :(得分:0)

使用' pd.concat' 可以在这里完成工作。

import pandas as pd
raw_data = {'Series_Date':['2017-03-10','2017-03-10','2017-03-10','2017-03-13','2017-03-13','2017-03-13'],'Value':[1,1,1,1,1,1],'Type':['SP','1M','3M','SP','1M','3M'],'Desc':['Check SP','Check 1M','Check 3M','Check SP','Check 1M','Check 3M']}
df1= pd.DataFrame(raw_data,columns=['Series_Date','Value','Type','Desc'])
print 'df1:\n', df1

appended_data = {'Series_Date':['2017-03-13','2017-03-13','2017-03-13'],'Value':[1,1,1],'Type':['SP','1M','3M'],'Desc':['Check SP','Check 1M','Check 3M']}
appended = pd.DataFrame(appended_data,columns=['Series_Date','Value','Type','Desc'])
print 'appended\n:',appended

df_concat =pd.concat([appended,df1],axis=0)
print 'concat\n:',df_concat

结果如下:

df1:
  Series_Date  Value Type      Desc
0  2017-03-10      1   SP  Check SP
1  2017-03-10      1   1M  Check 1M
2  2017-03-10      1   3M  Check 3M
3  2017-03-13      1   SP  Check SP
4  2017-03-13      1   1M  Check 1M
5  2017-03-13      1   3M  Check 3M
appended
:   Series_Date  Value Type      Desc
0  2017-03-13      1   SP  Check SP
1  2017-03-13      1   1M  Check 1M
2  2017-03-13      1   3M  Check 3M
concat
:   Series_Date  Value Type      Desc
0  2017-03-13      1   SP  Check SP
1  2017-03-13      1   1M  Check 1M
2  2017-03-13      1   3M  Check 3M
0  2017-03-10      1   SP  Check SP
1  2017-03-10      1   1M  Check 1M
2  2017-03-10      1   3M  Check 3M
3  2017-03-13      1   SP  Check SP
4  2017-03-13      1   1M  Check 1M
5  2017-03-13      1   3M  Check 3M

答案 1 :(得分:0)

如何合并descSeries_date

adfs = {k:df.merge(appended,on=['Desc' , 'Series_Date'], how='left',suffixes=['','_Appended']) for (k,df) in dict.items()}

appended.Desc == df.Desc这样的陈述是有问题的,因为这些系列的形状不同。您可以尝试isin,例如appended.Desc.isin(df.Desc)