读取CSV文件并将数据转换为Python列表。ValueError: 无法将字符串转换为浮点数:
我有一个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文件?如果我选择后者,我就会失去对节点的跟踪。
2 个回答
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)
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