为何NetworkX无法读取pd.read_csv加载的CSV数据集文件?
解决NetworkX读取CSV数据集的错误问题
错误根源
nx.read_weighted_edgelist()和nx.read_edgelist()仅支持读取文件路径/文件流,不能直接传入pandas DataFrame,直接传df会导致函数错误解析数据结构。- 你的CSV使用分号
;作为分隔符,但pandas默认用逗号分隔,导致列未正确拆分,表头和数据被当成了单个字段,引发格式不匹配错误。
正确解决步骤
第一步:正确读取CSV文件
指定分隔符为分号,确保列被正确拆分:
import pandas as pd # 指定sep=";"匹配CSV的分隔符 df = pd.read_csv("/Users/leokarl/Downloads/a2 (1).csv", sep=";")
第二步:将DataFrame转为NetworkX图(推荐方法)
使用NetworkX专门为DataFrame设计的from_pandas_edgelist函数,直接转换:
import networkx as nx # 假设源节点列是ID1,目标节点列是ID2,权重列是% # edge_attr指定要加入图的边缘属性,如需将属性名改为weight,可写成edge_attr={'%': 'weight'} G = nx.from_pandas_edgelist( df, source='ID1', target='ID2', edge_attr='%', create_using=nx.Graph() # 根据需求选择图类型,比如nx.DiGraph()对应有向图 )
备选方法(不推荐,适合特殊场景)
如果一定要用read_weighted_edgelist,可以先将DataFrame导出为符合格式的文本文件,再读取:
# 导出为空格分隔的边缘列表(无表头) df.to_csv("/tmp/tmp_edgelist.csv", sep=" ", index=False, header=False) # 读取临时文件 G = nx.read_weighted_edgelist("/tmp/tmp_edgelist.csv")
内容的提问来源于stack exchange,提问作者Karl
相关产品推荐
相关产品推荐

