Name Class Species
a 1 3
b 2 4
c 3 2
a 1 3
b 2 1
c 3 2
上述数据将来自CSV文件。需要使用numpy将其转换为结构化数组。需要来自csv的标题成为数组的列标签。
需要打印每个类别中每个名称的平均值(第1类,第2类和第3类的每个物种的平均值)
我使用了numpy.genfromtxt()
。
答案 0 :(得分:0)
这是从csv文件创建numpy
结构化数组的一种方法:
import pandas as pd
arr = pd.read_csv('file.csv').to_records(index=False)
# rec.array([('a', 1, 3), ('b', 2, 4), ('c', 3, 2), ('a', 1, 3), ('b', 2, 1),
# ('c', 3, 2)],
# dtype=[('Name', 'O'), ('Class', '<i8'), ('Numbers', '<i8')])
然后,您可以使用numpy
或(更简单)pandas
来执行计算。
答案 1 :(得分:0)
在Py3上使用最新的numpy(1.14)。
你的样品,清理过来:
In [93]: txt = """Name --- Class --- Numbers
...: a ---------- 1 -------- 3
...: b ---------- 2 -------- 4
...: c ---------- 3 -------- 2
...: a ---------- 1 -------- 3
...: b ---------- 2 ------- 1
...: c ---------- 3 --------- 2"""
In [94]: data = np.genfromtxt(txt.splitlines(), dtype=None, names=True, encoding=None)
In [95]: data
Out[95]:
array([('a', '----------', 1, '--------', 3),
('b', '----------', 2, '--------', 4),
('c', '----------', 3, '--------', 2),
('a', '----------', 1, '--------', 3),
('b', '----------', 2, '-------', 1),
('c', '----------', 3, '---------', 2)],
dtype=[('Name', '<U1'), ('f0', '<U10'), ('Class', '<i8'), ('f1', '<U9'), ('Numbers', '<i8')])
或跳过虚线列:
In [96]: data = np.genfromtxt(txt.splitlines(), dtype=None, names=True, encoding=None, usecols=[0,2,4])
In [97]: data
Out[97]:
array([('a', 1, 3),
('b', 2, 4),
('c', 3, 2),
('a', 1, 3),
('b', 2, 1),
('c', 3, 2)],
dtype=[('Name', '<U1'), ('Class', '<i8'), ('Numbers', '<i8')])