2017-03-31 60 views
0

合并在一个字典一个数据帧与另一数据帧我有一个目前看起来像这样的字典:在Python

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本字典等的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异常:只能比较相同标记的一系列对象

尝试阅读thie错误,但不知道如何这是适用于此,任何想法可以做什么来克服这个错误或另一种方法做

+2

'dict'和'.merge'不会导致这个错误。该消息对于这个问题非常清楚,您正在比较的系列('append.Desc == df.Desc')没有相同的标签索引。您是否尝试使用Google搜寻错误? –

回答

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 

+0

在我的情况下,实际上并不工作,因为我试图在字典中添加DF的列。 – sg91

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)