错误解决:在使用ogb加载dgl数据集时出错
报错
在使用ogb.nodeproppred.DglNodePropPredDataset
加载数据集时,报错
AttributeError: ‘float’ object has no attribute ‘split’
尝试加载不同数据集,都会在同一个地方报这个错。
错误溯源
查看出错的位置为:
ogb包中的ogb.nodeproppred.dataset_dgl.py
文件中
additional_node_files = self.meta_info['additional node files'].split(',')
这一行
相关片段为:
本来应该为None的值,在此处为nan, 进入else处理,因此出错。
if self.meta_info['additional edge files'] == 'None':
additional_edge_files = []
else:
additional_edge_files = self.meta_info['additional edge files'].split(',')
查看代码逻辑:
self.meta_info = master[self.name]
meta_info是加载的数据集的所有信息。
master = pd.read_csv(os.path.join(os.path.dirname(__file__), 'master.csv'), index_col = 0)
数据集的信息是通过读取ogb包中的ogb.nodeproppred.master.csv
文件获取的。
master.csv中存在None, 在使用pandas.read_csv()
读取时,被处理为nan
因此在判断时出错。
修改
第一种方法:只需要在pandas读取master.csv时,忽略处理缺失值。保持文件的内容不变,在判断时就不会出错。
在当前环境的库中找到data_dgl.py
.
路径一般为:环境名\Lib\site-packages\ogb\nodeproppred\dataset_dgl.py
如果是加载别的类型的数据集,将nodeproppred
更换为别的路径
找到加载读取master的语句,设置na_filter = False, 使pandas忽略None。
master = pd.read_csv(os.path.join(os.path.dirname(__file__), 'master.csv'), index_col = 0,na_filter=False)
第二种方法:把判断的逻辑改为if self.meta_info['additional edge files'] == 'nan':
(不推荐)
代码中的判断逻辑不止一处,不推荐这样修改。
延申
不只是在节点分类的数据集中有这样情况,在ogb每种数据集中都是这样,问题都一样。
猜测是pandas的更新导致的?