如何转换numpy子数组的dtype?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何转换numpy子数组的dtype?相关的知识,希望对你有一定的参考价值。
我正在尝试将csv文件中的数据读取到numpy数组中。由于csv文件包含空字段,因此我将所有数据读取到dtype=str
数组中,并计划将行/列转换为适当的数字类型。下面的示例是我无法成功转换这些数组dtypes。
import numpy as np
x = np.array([
['name', 'property', 'value t0', 'value t1', 'value t2'],
['a', 0.5, 1, 2, 3],
['b', 0.2, 5, 10, 100],
['c', 0.7, 3, 6, 9],
], dtype=str)
首先,让我们查看原始数组。
# print("
.. x (shape={}, dtype={}):
{}
".format(x.shape, x.dtype, x))
[['name' 'property' 'value t0' 'value t1' 'value t2'] ['a' '0.5' '1' '2' '3'] ['b' '0.2' '5' '10' '100'] ['c' '0.7' '3' '6' '9']]
然后,确保将数字条目(从第一行向下和第二列右移)转换为type <int>
。
# print(x[1:, 2:].astype(int))
[[ 1 2 3] [ 5 10 100] [ 3 6 9]]
所以,我试图将这些概念放在一起。
# # x[1:, 2:] = x[1:, 2:].astype(int)
# x[1:, 2:] = np.array(x[1:, 2:], dtype=int)
print(x)
[['name' 'property' 'value t0' 'value t1' 'value t2'] ['a' '0.5' '1' '2' '3'] ['b' '0.2' '5' '10' '100'] ['c' '0.7' '3' '6' '9']]
为什么选定的条目仍保留字符串?我看到张贴了类似的问题,对此可接受的解决方案似乎是使用命名字段。但是,对于我的用例,我更喜欢使用数字索引而不是命名字段。
答案
In [83]: alist = [
...: ['name', 'property', 'value t0', 'value t1', 'value t2'],
...: ['a', 0.5, 1, 2, 3],
...: ['b', 0.2, 5, 10, 100],
...: ['c', 0.7, 3, 6, 9],
...: ]
In [84]: alist
Out[84]:
[['name', 'property', 'value t0', 'value t1', 'value t2'],
['a', 0.5, 1, 2, 3],
['b', 0.2, 5, 10, 100],
['c', 0.7, 3, 6, 9]]
In [85]: np.array(alist)
Out[85]:
array([['name', 'property', 'value t0', 'value t1', 'value t2'],
['a', '0.5', '1', '2', '3'],
['b', '0.2', '5', '10', '100'],
['c', '0.7', '3', '6', '9']], dtype='<U8')
对象数组:
In [87]: np.array(alist, dtype=object)
Out[87]:
array([['name', 'property', 'value t0', 'value t1', 'value t2'],
['a', 0.5, 1, 2, 3],
['b', 0.2, 5, 10, 100],
['c', 0.7, 3, 6, 9]], dtype=object)
结构化数组:
In [88]: np.array([tuple(row) for row in alist[1:]], dtype='U1,f,i,i,i')
Out[88]:
array([('a', 0.5, 1, 2, 3), ('b', 0.2, 5, 10, 100),
('c', 0.7, 3, 6, 9)],
dtype=[('f0', '<U1'), ('f1', '<f4'), ('f2', '<i4'), ('f3', '<i4'), ('f4', '<i4')])
熊猫:
In [90]: import pandas as pd
In [91]: pd.DataFrame(alist[1:], columns=alist[0])
Out[91]:
name property value t0 value t1 value t2
0 a 0.5 1 2 3
1 b 0.2 5 10 100
2 c 0.7 3 6 9
以上是关于如何转换numpy子数组的dtype?的主要内容,如果未能解决你的问题,请参考以下文章
转换具有 numpy 数组的列将其转换为 dtype 作为对象的 numpy 数组