以下是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列中的元素列表不是值。
如何修改我的代码?
答案 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]