pd.merge
合并的时候,首先要求是dataframe
对象或者是series对象
Can only merge Series or DataFrame objects,a <class 'numpy.ndarray'> was passed
这里我的numpy.ndarray是result = model.predict(test_data)返回的结果
ndarray
如何转dataframe
呢,如下:pd.Dataframe(ndarray)
同理,ndarray
转series
时,可以:pd.Series(ndarray)
有些时候dataframe对象的类型为object
时,也可以用上述方式解决,只需在后面加一句dtype=np.float
即可
其次,要求两个dataframe
或者series
有公共的columns
,否则
No common columns to perform merge on. Merge options: left_on=None, right_on=None, left_index=False, right_index=False
使用concat
时遇到
first argument must be an iterable of pandas objects, you passed an object of type "Series"
是因为没有将需要合并的字段用[]
括起来。(如何判断对象是否是可迭代对象可以用一下方法)
isinstance('abc',Iterable)
除此之外,还可修改第二个参数,判断是否是某一类型的对象。
加上[]
之后还是没正常输出,为什么呢?因为我在操作时,将Dataframe
的index=0
的行删除了,但是predict
返回的ndarray
是从0开始计数的,因为索引值不匹配导致出错。并且还有可能出现hashtable
之类的问题。
这里我的问题是ndarray
的初始index
是从0开始,然后,因为我删除了类型为dataframe
的id字段的index=0
行,所以导致写如文件时,一直写不进去。最后还是使用reset_index
解决了。
id = id.copy().reset_index(drop=True)
file = pd.concat([id,final],axis=1)
最后写入csv
时,去除原始index
需要这样
file.to_csv('res.csv',index=None)