我正在尝试合并两个数据框,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
答案 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