【问题标题】:Read any column from csv file从 csv 文件中读取任何列
【发布时间】:2014-06-18 21:16:55
【问题描述】:

以下是 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 列中的元素是列表而不是值。

如何修改我的代码?

【问题讨论】:

  • 你称它为 CSV 文件,我看不到逗号分隔符。实际的分隔符是什么?
  • 您想将第 5 列作为列表读取还是要为列表中的每个值创建一列?
  • 查看csvmodule for python。然后是这个:stackoverflow.com/questions/20363395/….
  • @DavidK 我想将第 5 列作为列表读取,然后从列表中读取所有元素并进行计算
  • @merlin2011:“CSV 文件”已成为任何固定宽度格式 (FWF) 的通用名称,无论它是否具有显式分隔符。

标签: python csv writer


【解决方案1】:

使用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)

【讨论】:

    【解决方案2】:

    在您发布的文件中,它有多个分隔符,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]
    

    【讨论】:

    • 感谢您的回答。但是,我想将第 5 列作为列表读取,然后从列表中读取所有元素以进行进一步计算
    • @PythonFun 我也很喜欢玩python,在这里检查一下,它可能会有所帮助stackoverflow.com/questions/4998629/…
    【解决方案3】:

    要读取第 5 列的所有元素并进行计算,您可以对它们中的每一个进行计算:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 2019-05-27
      • 2011-09-06
      相关资源
      最近更新 更多