从csv文件中读取任何列

时间:2014-06-18 21:16:56

标签: python csv writer

以下是myfile.csv

的内容
  1st        2nd     3rd      4th                     5th
2061100   10638650  -8000     25         [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
2061800   10639100  -8100     26         [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
2061150   10638750  -8250     25         [3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0]
2061650   10639150  -8200     25         [4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0]
2061350   10638800  -8250     3          [5.0, 5.0, 5.0]
2060950   10638700  -8000     1          [1.0]
2061700   10639100  -8100     11         [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
2061050   10638800  -8250     6          [3.0, 3.0, 3.0, 3.0, 3.0, 3.0]
2061500   10639150  -8200     1          [4.0]
2061250   10638850  -8150     16         [5.0, 5.0, 5.0, 5.0]

我的代码:

from numpy import genfromtxt
mydata = genfromtxt('myfile.csv', delimiter=',')
arr = np.array(mydata)
col5 = arr[:,4]

我想从csv文件中读取第5列。但是,第5列中的元素列表不是值。

如何修改我的代码?

3 个答案:

答案 0 :(得分:2)

使用pandas读取您的csv文件,然后slice列。您的[]被视为NaN。所以请避免使用NaN。下面的例子(我只有几行但你的整个数据都是一样的):

 >>>import pandas as pd
 >>>import numpy
 >>>df = pd.read_csv("stack.csv",header=None,na_values=" NaN")
 >>> df
            0         1     2   3      4   5   6   7   8   9      10
            0   206110  10638650 -8000  25   [1.0   1   1   1   1   1   1.0]
            1  2061800  10639100 -8100  26   [2.0   2   2   2   2   2   2.0]
            2  2061150  10638750 -8250  25   [3.0   3   3   3   3   3   3.0]
            3  2061650  10639150 -8200  25   [4.0   4   4   4   4   4   4.0]
 >>> x = df.ix[:,4:10]
 >>> x
             4   5   6   7   8   9      10
         0   [1.0   1   1   1   1   1   1.0]
         1   [2.0   2   2   2   2   2   2.0]
         2   [3.0   3   3   3   3   3   3.0]
         3   [4.0   4   4   4   4   4   4.0]
  >>> x = numpy.array(x)
  >>> x
      array([['[1.0', 1.0, 1.0, 1.0, 1.0, 1.0, ' 1.0]'],
             [' [2.0', 2.0, 2.0, 2.0, 2.0, 2.0, ' 2.0]'],
              ['[3.0', 3.0, 3.0, 3.0, 3.0, 3.0, ' 3.0]'],
              [' [4.0', 4.0, 4.0, 4.0, 4.0, 4.0, ' 4.0]']], dtype=object)

答案 1 :(得分:1)

在你发布的文件中,它有多个分隔符,python很难检测到你确切想要获得哪一列,我认为要达到你的最终目标,为什么不得到一个原始输出并处理它以获得你的最终结果。 你能将所有第5列过滤到文件output.txt吗? input.txt就是您发布的内容,如果是这样的话:

awk -F" " 'BEGIN{OFS=""}{$1="";$2="";$3="";$4=""; print}' input.txt > output.txt

    output:
    [1.0,1.0,1.0,1.0,1.0,1.0,1.0]
    [2.0,2.0,2.0,2.0,2.0,2.0,2.0]
    [3.0,3.0,3.0,3.0,3.0,3.0,3.0]
    [4.0,4.0,4.0,4.0,4.0,4.0,4.0]
    [5.0,5.0,5.0]
    [1.0]
    [2.0,2.0,2.0,2.0,2.0,2.0,2.0,2.0]
    [3.0,3.0,3.0,3.0,3.0,3.0]
    [4.0]
    [5.0,5.0,5.0,5.0]

答案 2 :(得分:0)

要阅读第5列的所有元素并进行计算,您可以对每个元素进行操作:

v = eval(v) 


In [19]: v = '[1,2,3]'

In [20]: eval(v)
Out[20]: [1, 2, 3]