如何向ndarray添加列?

2 投票
1 回答
3991 浏览
提问于 2025-04-17 15:42

我有下面这段代码,它用genfromtxt读取一个文件,然后给我一个ndarray:

arr = np.genfromtxt(filename, delimiter=',', converters={'Date': make_date},
                    names=('Date', 'Name','Age'), dtype=None)

现在,我想给这个数组添加一列,叫做“Marks”。你能帮我一下,告诉我该怎么做吗?

1 个回答

8

np.genfromtxt 这个函数会生成记录数组。记录数组的列不能像普通的 numpy 数组那样直接拼接。如果你想要拼接列,可以使用 numpy.lib.recfunctions.append_fields 这个函数。

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

s = StringIO('2012-12-10,Peter,30\n2010-01-13,Mary,31')
arr = np.genfromtxt(s, delimiter=',', names=('Date', 'Name','Age'), dtype=None)
new_arr = rfn.append_fields(arr, names='Marks', data=['A','C+'], usemask=False)

这样做会返回:

>>> arr
array([('2012-12-10', 'Peter', 30), ('2010-01-13', 'Mary', 31)], 
  dtype=[('Date', '|S10'), ('Name', '|S5'), ('Age', '<i8')])
>>> new_arr
array([('2012-12-10', 'Peter', 30, 'A'), ('2010-01-13', 'Mary', 31, 'C+')], 
  dtype=[('Date', '|S10'), ('Name', '|S5'), ('Age', '<i8'), ('Marks', '|S2')])

撰写回答