【问题标题】:Read CSV and Separate by column读取 CSV 并按列分隔
【发布时间】:2012-06-22 23:17:49
【问题描述】:

Python 新手(和一般编程),如果这很简单和/或在我没有找到的地方回答,请随时以典型的论坛方式骚扰我。

我有一堆 CSV,每个都包含 10 个 XY 坐标,如下所示:

10,5
2,4
5,6 
7,8
9,12
3,45
2,4
6,5
0,3 
5,6 

我希望将 X 坐标和 Y 坐标分成两个单独的列表,以便我可以从给定列表中的每个值中减去一个值。例如,从 X 坐标列表中的每个值中减去 5,从 Y 坐标列表中的每个值中减去 3。然后我将获取每个值的 abs() 并找到最小值。一旦找到这些最小值,我想将列表添加在一起,以便将每个值添加到它的对应项

IE) 如果 X 的绝对值类似于

4
5
....

和Y类似

6
7
....

我想添加 4 和 6,然后是 5 和 7,等等。

为了将它们分开,我尝试了

import csv
filein = open("/path/here")
reader = csv.reader(filein, skipinitialspace = True)
listofxys = []
for row in reader:
    listofxys.append(row)

Xs = listofxys.pop(0) # to pop all the X's

Ys = listofxys.pop() # to pop all the Y's

但它提供的不是所有前导值,而是第一个 XY 对。我在这里做错了什么?

最终目标是找到离 XY 坐标最近的点,所以如果这是一个不好的方法,请随时引导我转向另一个方向。

提前致谢!

【问题讨论】:

    标签: python list csv coordinate


    【解决方案1】:
        import os,csv, numpy, scipy
        from numpy import *
        f= open('some.csv', 'rb') 
        reader = csv.reader(f, delimiter=',')
        header = reader.next()
        zipped = zip(*reader)
        print( zipped[1] ) # is the 2nd column of the csv file
    

    HTH

    【讨论】:

      【解决方案2】:

      值得注意的是,您应该尝试使用 the with statement 在 Python 中打开文件时。这既更具可读性又消除了 文件未关闭的可能性(即使发生异常)。

      你的实际问题在于你没有做你想做的事。

      reader = csv.reader(filein, skipinitialspace = True)
      listofxys = []
      for row in reader:
          listofxys.append(row)
      

      所有这些都是reader = list(csv.reader(filein, skipinitialspace = True)),效率很低。

      您想要做的是使用the zip() builtin 获取对列表并将其转换为两个列表。您可以使用星号运算符执行此操作:

      import csv
      
      with open("test") as filein:
          reader = csv.reader(filein, skipinitialspace = True)
          xs, ys = zip(*reader)
      
      print(xs)
      print(ys)
      

      这给出了:

      ('10', '2', '5', '7', '9', '3', '2', '6', '0', '5')
      ('5', '4', '6', '8', '12', '45', '4', '5', '3', '6')
      

      请注意这些值是字符串。如果您想将它们作为数字,您将需要使用csv.QUOTE_NONNUMERIC,例如:reader = csv.reader(filein, quoting=csv.QUOTE_NONNUMERIC, skipinitialspace = True)

      这给出了:

      (10.0, 2.0, 5.0, 7.0, 9.0, 3.0, 2.0, 6.0, 0.0, 5.0)
      (5.0, 4.0, 6.0, 8.0, 12.0, 45.0, 4.0, 5.0, 3.0, 6.0)
      

      【讨论】:

        【解决方案3】:

        听起来您正在寻找 zip 功能,记录在此:

        http://docs.python.org/library/functions.html#zip

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-04-01
          • 2013-04-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-15
          • 1970-01-01
          相关资源
          最近更新 更多