python - 更改对象类型的重组列的数据类型

标签 python arrays numpy recarray

我有一个 csv 文件,其中两列(v3 和 v7)对于所有观察结果都是空白:

v1,v2,v3,v4,v5,v6,v7
GNB,1980,,20,-1.168689,0.4619077,
GNB,1981,20,-1.185176,0.4619077,

我正在使用 csv2rec 函数将其读入 python (epd-7.0-2):

from pylab import rec2csv, csv2rec
all_data = csv2rec(infile)

当我尝试增加第三行或第七行中的值时,我收到错误(其他列不会发生):

all_data = csv2rec(infile)
all_data.v3 = 'test'

运行时错误:无法在对象数组上调用 setfield

所以我尝试更改类型,却遇到了其他错误:

all_data.v3.dtype = '|S30'
TypeError: Cannot change data-type for object array.

另一个问题是我也无法更改数组中的其他列:

all_data.v1 = 'test'
RuntimeError: cannot call setfield on an object array

想法?谢谢,

最佳答案

使用.astype方法:

all_data.astype(dtype=[('v1', 'S3'), ('v2', '<i4'), ('v3', '|S30'), ('v4', '<f8'), ('v5', '<f8'), ('v6', '<f8'), ('v7', 'O')])
#rec.array([('GNB', 1980, '-1', 20.0, -1.168689, 0.4619077, None),
#           ('GNB', 1981, '20', -1.185176, 0.4619077, nan, None)], 
#             dtype=[('v1', 'S3'), ('v2', '<i4'), ('v3', 'S30'), ('v4', '<f8'), ('v5', '<f8'), ('v6', '<f8'), ('v7', 'O')])

关于python - 更改对象类型的重组列的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16601819/

相关文章:

python - 使用python将十六进制字符串发送到套接字

python - 根据产品数量计算 PDF 中的页面

python - 一维 numpy 数组和 scipy 稀疏矩阵之间的点积

python - 叠加两个 numpy 数组,将第四平面视为 alpha 级别

python - 用 pandas 中的上限值和下限值替换列的元素(如果连续值相差 10 )

python - 如何从矩阵中选择行或列?

javascript - 如何将两个带有索引 en 点的字符串放入 Three.js BufferGeometry 中?

c# - 从多个切片创建 Span

java - 如何将变量保存在文件中?

python - 查找向量矩阵的最频繁行或模式 - Python/NumPy