合并数据集触发pandas.errors.MergeError,求正确代码
解决pandas合并时的MergeError问题
错误原因
报错MergeError: Not allowed to merge between different levels是因为races_df和runs_df的索引层级不匹配(一个是单层索引,一个是多层索引),而join方法默认会结合索引与指定列进行匹配,导致冲突。
修正方案
方案1:用merge替代join(推荐)
merge方法专门针对列匹配进行合并,不受索引层级影响,逻辑更清晰:
data = races_df.merge(runs_df, on='race_id', how='right') X = data[data.columns[:-14]] ss = preprocessing.StandardScaler() X = pd.DataFrame(ss.fit_transform(X), columns = X.columns) y_won = data[data.columns[-14:]].applymap(lambda x: 1.0 if 0.5 < x < 1.5 else 0.0) print(X.shape) print(y_won.shape)
方案2:统一索引层级后用join
如果坚持使用join,需要先将多层索引的DataFrame转为单层索引,再执行合并:
# 假设runs_df是多层索引,先重置索引 runs_df = runs_df.reset_index() # 以race_id为索引进行join data = races_df.join(runs_df.set_index('race_id'), on='race_id', how='right') # 后续处理代码不变 X = data[data.columns[:-14]] ss = preprocessing.StandardScaler() X = pd.DataFrame(ss.fit_transform(X), columns = X.columns) y_won = data[data.columns[-14:]].applymap(lambda x: 1.0 if 0.5 < x < 1.5 else 0.0) print(X.shape) print(y_won.shape)
内容的提问来源于stack exchange,提问作者user3060111
相关产品推荐
相关产品推荐

