使用python中的numpy读取csv文件中的特定列

时间:2017-11-17 02:51:32

标签: python numpy

如何只在python中使用numpy读取字符串列?

csv文件:

1,2,3,"Hello"
3,3,3,"New"
4,5,6,"York"

如何获得如下数组:

["Hello","york","New"]

不使用pandas和sklearn。

3 个答案:

答案 0 :(得分:3)

我在csv

中将列名称设为a,b,c,d
import numpy as np
ary=np.genfromtxt(r'yourcsv.csv',delimiter=',',dtype=None)
ary.T[-1]
Out[139]: 
array([b'd', b'Hello', b'New', b'York'],
      dtype='|S5')

答案 1 :(得分:1)

import numpy 
fname = 'sample.csv'
csv = numpy.genfromtxt(fname, dtype=str, delimiter=",")
names = csv[:,-1]
print(names)

选择数据类型 控制我们从文件中读取的字符串序列如何转换为其他类型的主要方法是设置dtype参数。此参数的可接受值为:

单个类型,例如dtype = float。输出将是给定dtype的2D,除非使用names参数将每个列与名称相关联(见下文)。请注意,dtype = float是genfromtxt的默认值。 一系列类型,例如dtype =(int,float,float)。 逗号分隔的字符串,例如dtype =“i4,f8,| U3”。 一个包含两个键“名称”和“格式”的字典。 一系列元组(名称,类型),例如dtype = [('A',int),('B',float)]。 现有的numpy.dtype对象。 特殊值无。在这种情况下,列的类型将根据数据本身确定(见下文)。

当dtype = None时,每列的类型由其数据迭代确定。我们首先检查一个字符串是否可以转换为布尔值(也就是说,如果字符串在小写的情况下匹配true或false);然后它是否可以转换为整数,然后转换为浮点数,然后转换为复数并最终转换为字符串。可以通过修改StringConverter类的默认映射器来更改此行为。

为方便起见,提供了dtype = None选项。但是,它明显慢于明确设置dtype。

答案 2 :(得分:0)

快速文件替换:

In [275]: txt = b'''
     ...: 1,2,3,"Hello"
     ...: 3,3,3,"New"
     ...: 4,5,6,"York"'''

In [277]: np.genfromtxt(txt.splitlines(), delimiter=',',dtype=None,usecols=3)
Out[277]: 
array([b'"Hello"', b'"New"', b'"York"'],
      dtype='|S7')
Py3中的

bytestring数组;或默认的unicode字符串dtype:

In [278]: np.genfromtxt(txt.splitlines(), delimiter=',',dtype=str,usecols=3)
Out[278]: 
array(['"Hello"', '"New"', '"York"'],
      dtype='<U7')

或整件事:

In [279]: data=np.genfromtxt(txt.splitlines(), delimiter=',',dtype=None)
In [280]: data
Out[280]: 
array([(1, 2, 3, b'"Hello"'), (3, 3, 3, b'"New"'), (4, 5, 6, b'"York"')],
      dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', 'S7')])

选择f3字段:

In [282]: data['f3']
Out[282]: 
array([b'"Hello"', b'"New"', b'"York"'],
      dtype='|S7')

速度应该基本相同