2014-03-31 28 views
4

我是一个Python中的完整noobie,我想用networkx软件包研究一个数据集。我不明白什么是错在这里:无法在Python中的networkx中加载简单的csv

我有一个CSV它看起来像这样(摘录):

['152027', '-6167'] 
['152027', '-4982'] 
['152027', '-3810'] 
['152027', '-2288'] 
['152027', '-1253'] 
['152100', '-152100'] 
['152100', '-86127'] 

可以调用这个.csv文件nodes。数字继承人没有特别的含义。他们只是匿名的名字:这么152027是连接到个人-6167人,个体-4982等

我用下面的代码在Python

import csv 
import networkx as nx 

file = csv.reader(open('nodes', 'rb'), delimiter=',') 

G=nx.read_edgelist(file, delimiter=',',nodetype=float,encoding='utf-8') 
G.number_of_nodes() 

,我得到了伤心Out[71]: 0 我不明白这里有什么问题。 你能帮我吗?

+1

这真的是你的“csv文件”的样子吗?或者当你重复你的'csv.reader'的时候得到的列表是什么? – DSM

+1

那么,第一个问题是,read_edgelist期待一个文件对象,你传递一个csv.reader对象 – StephenH

+0

@DSM这就是当我输入文件中的行时''print row'' –

回答

10

nx.read_edgelist预计第一个变量是文件句柄或文件名字符串,而不是csv.reader对象。

根本不使用csv;尽量只

G = nx.read_edgelist('nodes', delimiter=',', nodetype=int, encoding="utf-8") 

编辑:如果你需要跳过标题行,你可以做

with open('nodes', 'rb') as inf: 
    next(inf, '') # skip a line 
    G = nx.read_edgelist(inf, delimiter=',', nodetype=int, encoding="utf-8") 
+0

谢谢!大!但是,如果我的csv包含列“标题”,我应该怎么做呢? –

+0

真不错!谢谢你 –

0

文件是一个Python关键词。尝试命名其他变量,如csvfile。