2015-06-19 51 views
0

我试图合并两个数据帧,testr和testc,但我不断收到关于“Channel ID”的关键错误,不知道是什么问题。数据框必须是相同的大小还是具有相同的数据类型才能使用pd.merge?这里是我的代码在每个数据帧的.info()合并:在熊猫中合并数据帧 - 保持关键错误?

def matchID_RC(rev,cost): 
    rc = pd.merge(rev, cost, on='Channel ID', how = 'outer') 
    return rc 

testr.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 169 entries, 0 to 168 
Data columns (total 7 columns): 
Channel ID   169 non-null int64 
Channel Name  169 non-null object 
Impressions  169 non-null object 
Fill Rate   169 non-null object 
Gross Rev   169 non-null object 
Impression Fees 169 non-null object 
Exchange Fees  169 non-null object 
dtypes: int64(1), object(6) 
memory usage: 10.6+ KB 

testc.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 63 entries, 0 to 62 
Data columns (total 3 columns): 
Channel ID 62 non-null object 
Campaign  63 non-null object 
Ad Spend  63 non-null float64 
dtypes: float64(1), object(2) 
memory usage: 2.0+ KB 

回答

0

他们需要的是相同的数据类型。毕竟,你无法比较一个字符串和一个整数是否相同。

0

看来'Channel ID'确实存在于两个数据帧中,但是在一个中它被定义为object而另一个被定义为int

这可以固定convert_objects

def matchID_RC(rev,cost,col='Channel ID'): 
    rev[col]=rev[col].convert_objects(convert_numeric=True) 
    cost[col]=cost[col].convert_objects(convert_numeric=True) 
    rc = pd.merge(rev, cost, on=col, how = 'outer') 
    return rc