9

我是 python 新手,所以这听起来很基础。我已经使用 csv2rec 导入了一个 csv 文件。第一行有标题。我想将标题更改为“x”、“y”、“z”。这样做的最佳方法是什么?

>>> import matplotlib
>>> import matplotlib.mlab as mlab
>>> r= mlab.csv2rec('HeightWeight.csv', delimiter= ',')
>>> names= r.dtype.names
>>> for i in names:
     print i


index
heightinches
weightpounds
4

3 回答 3

25

您可以简单地分配给.dtype.names

>>> d = np.array([(1.0, 2), (3.0, 4)], dtype=[('a', float), ('b', int)])
>>> d
array([(1.0, 2), (3.0, 4)], 
      dtype=[('a', '<f8'), ('b', '<i8')])
>>> d['a']
array([ 1.,  3.])
>>> d.dtype.names
('a', 'b')
>>> d.dtype.names = 'x', 'y'
>>> d
array([(1.0, 2), (3.0, 4)], 
      dtype=[('x', '<f8'), ('y', '<i8')])
>>> d['x']
array([ 1.,  3.])

同样的方式recarray

>>> d
rec.array([(1.0, 2), (3.0, 4)], 
      dtype=[('a', '<f8'), ('b', '<i8')])
>>> d.dtype.names = 'apple', 'pear'
>>> d
rec.array([(1.0, 2), (3.0, 4)], 
      dtype=[('apple', '<f8'), ('pear', '<i8')])
于 2013-01-20T22:23:15.233 回答
3

为此目的有一种rename_fields方法。numpy.lib.recfunctions它也适用于掩码数组。

import numpy as np
import numpy.lib.recfunctions as rfn

ab = np.ma.zeros(3, dtype=[('a', 'f4'), ('b', 'i4')])
xy = rfn.rename_fields(ab, {'a': 'x', 'b': 'y'})

print(ab.dtype, ab.mask.dtype)
print(xy.dtype, xy.mask.dtype)

输出:

[('a', '<f4'), ('b', '<i4')] [('a', '?'), ('b', '?')]
[('x', '<f4'), ('y', '<i4')] [('x', '?'), ('y', '?')]
于 2018-01-25T10:56:59.113 回答
2

mlab.csv2rec有一个names参数,您可以使用它来设置列名:

r= mlab.csv2rec('HeightWeight.csv', delimiter= ',', 
                 names=['apple', 'pear'], 
                 skiprows=1)

namesis notNone时,csv2rec假定没有标题行。所以使用skiprows=1忽略标题行。

于 2013-01-20T22:28:46.150 回答