合并pandas中的数据帧 - 继续获取关键错误?

时间:2015-06-19 17:05:35

标签: python pandas

我正在尝试合并两个数据框,testr和testc,但我一直在“通道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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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