我是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
答案 0 :(得分:21)
您只需指定.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')])
答案 1 :(得分:2)
mlab.csv2rec有一个names
参数,可用于设置列名称:
r= mlab.csv2rec('HeightWeight.csv', delimiter= ',',
names=['apple', 'pear'],
skiprows=1)
当names
不是None
时,csv2rec
会假定没有标题行。因此,请使用skiprows=1
忽略标题行。
答案 2 :(得分:1)
出于此目的,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', '?')]