1、遇到问题
今天接到爬取手机型号的需求,在完成初版以后执行时,发现遇到了 Reindexing 仅对唯一值的索引对象有效。中间细节省略,就摘出相关的代码:
df=pd.DataFrame(columns=['手机model','手机机型','手机全称','手机机型'])
一个字典中插入了相关数据:
phone_mapping_model = {}
phone_mapping_model['手机model'] = "1"
phone_mapping_model['手机全称'] = "2"
phone_mapping_model['手机品牌'] = "3"
phone_mapping_model['手机机型'] = "4"
#将字段转为DataFrame
df1 = pd.DataFrame(phone_mapping_model, index=[0])
#将两个DataFrame进行拼接
df = pd.concat([df, df1], axis = 0)
通过Debug发现在把DataFrame(df1)拼接到最终的DataFrame(df)中时,就报错了:
pandas.errors.InvalidIndexError: Reindexing only valid with uniquely valued Index objects
二、排查问题
在 Stack Overflow上 有大佬建议可以缓解该错误,并且不需更改数据或删除重复数据。只需使用DataFrame.reset_index创建一个新索引,我就改了试试:
df1 = pd.DataFrame(phone_mapping_model, index=[0])
df.reset_index(inplace=True, drop=True)
df = pd.concat([df, df1], axis = 0)
还是报一样的错:
然后我将axis属性置为1看了看,可以发现不会报错了,只是每次新的手机型号在列上进行追加:
df = pd.concat([df, df1], axis = 1)
三、问题解决
其实非常简单,把其中 df 中的列删掉就可以正常实现每次将新获取的手机机型与df进行拼接:
df=pd.DataFrame() #df=pd.DataFrame(columns=['手机model','手机机型','手机全称','手机机型'])