选择并操作.csv中的列

use*_*088 3 python numpy

我有一个包含38列和1500多行的csv,其中包含浮点数和字符串.我想要从这个集合中的3列(x,y,z)浮点数据来找到平均值f=(x+y)/z.经过研究,我成功地将这些列分离为numpy数组并执行f=(x+y)/z.现在当我尝试总结f时,数组没有加起来.我打印f我看到1500项正确的值,但不是这些的总和.

  reader=csv.reader(open('myfile.csv' ,"rb"),delimiter=',')
  reader.next()
  reader.next()
  x=list(reader)
  data=numpy.array(x)
  rows=data.shape[0]
  for i in range (0,rows):
      x=numpy.array(data[i,18]).astype('float')
      y=numpy.array(data[i,19]).astype('float')
      z=numpy.array(data[i,6]).astype('float')
      f=numpy.array((x+y)/z)
      average=numpy.sum(f)/rows
      print average
Run Code Online (Sandbox Code Playgroud)

Jai*_*ime 5

如果data已经是数组,则不需要for循环:

x = data[:, 18].astype(float)
y = data[:, 19].astype(float)
z = data[:, 6].astype(float)
f = (x+y) / z
average = np.average(f)
Run Code Online (Sandbox Code Playgroud)

通过以下方式阅读文件可能会更好np.loadtxt:

data = np.loadtxt('myfile.csv', dtype=float, delimiter=',' skiprows=2,
                  usecols=(6, 18, 19))
Run Code Online (Sandbox Code Playgroud)

或获得x,yz直接:

x, y, z = np.loadtxt('myfile.csv', dtype=float, delimiter=',' skiprows=2,
                     usecols=(6, 18, 19), unpack=True)
Run Code Online (Sandbox Code Playgroud)