读取CSV文件并将数据转换为python列表.ValueError:无法将字符串转换为float



我有一个包含网络邻接矩阵的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文件之外,是否有其他方法可以克服此错误?如果我采用后一种方法,我将失去对节点的跟踪。

这里有两个选项:

  1. 可以跳过第一行和第一列:

    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
    
  2. 您可以使用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
    

如果您知道不需要第一行和第一列,则可以在迭代中跳过它们。

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)

最新更新