我有一个包含网络邻接矩阵的CSV文件。当我尝试使用以下代码将此数据转换为python列表列表时:
def main():
csvfile= open('airport_CnToCn_ajc.csv','rU')
reader = csv.reader(csvfile,delimiter=" ")
alldata = list(reader)
print alldata
numData=[[float(i) for i in row] for row in alldata]
print numData
我收到了错误
ValueError: could not convert string to float ,"Afghanistan","Albania","Algeria","American
因为我的csv文件的第一行和第一列表示网络边缘的源和目标。
除了通过删除第一行和第一列修改CSV文件之外,是否有替代方法可以克服此错误。如果我遵循后面的方法,我将失去对节点的跟踪。
答案 0 :(得分:0)
如果您知道不需要第一行和第一行,则可以在迭代中跳过它们。
def main():
with open('airport_CnToCn_ajc.csv','rU') as csvfile:
reader = csv.reader(csvfile)
alldata = list(reader)[1:]
print alldata
numData=[[float(i) for i in row[1:]] for row in alldata]
print numData
或者,减少一些副本(可能不需要):
reader_iter = csv.reader(csvfile)
next(reader_iter)
alldata = list(reader_iter)
答案 1 :(得分:0)
这里有两个选项:
您可以跳过第一行和第一列:
def main():
with open('airport_CnToCn_ajs.csv', 'rU') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
next(reader) # Skip first row
rows = list(reader)
data = [float(i) for i in row[1:] for row in rows] # skip first column
您可以使用DictReader
:
def main():
with open('airport_CnToCn_ajs.csv', 'rU') as csvfile:
reader = csv.DictReader(csvfile, delimiter=',')
rows = list(reader)
data = []
for row in rows:
i = []
i.append(row['columna']) # Your data columns
i.append(row['columnb'])
data.append(map(float, i)) # convert to float