错误解决:在使用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的更新导致的?
文章讲述了在使用ogb的DglNodePropPredDataset加载数据时遇到的AttributeError,原因在于master.csv中的None值被转换为nan。提供了两种解决方案:一是读取时忽略缺失值,二是修改判断逻辑以处理nan。问题普遍存在于ogb的各种数据集中,推测可能与pandas版本更新有关。
2538

被折叠的 条评论
为什么被折叠?



