首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用Python中的列表和数组创建结构化数组?

如何用Python中的列表和数组创建结构化数组?
EN

Stack Overflow用户
提问于 2015-04-04 13:46:07
回答 3查看 3.1K关注 0票数 0

我有一份表格A:

代码语言:javascript
运行
复制
A = ['P', 'Q', 'R', 'S', 'T', 'U']

以及表格的B数组:

代码语言:javascript
运行
复制
B = [[ 1  2  3  4  5  6]
     [ 7  8  9 10 11 12]
     [13 14 15 16 17 18]
     [19 20 21 22 23 24]]

现在,我想创建一个表单的结构化数组C:

代码语言:javascript
运行
复制
C = [[ P  Q  R  S  T  U]
     [ 1  2  3  4  5  6]
     [ 7  8  9 10 11 12]
     [13 14 15 16 17 18]
     [19 20 21 22 23 24]]

因此,我可以提取列名P、Q、R等的列。我尝试了以下代码,但它没有创建结构化数组,并给出了以下错误。

代码语言:javascript
运行
复制
import numpy as np
A = (['P', 'Q', 'R', 'S', 'T', 'U'])
B = np.array([[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18], [19, 20, 21, 22, 23, 24]])
C = np.vstack((A, B))
print (C)
D = C['P']

误差

代码语言:javascript
运行
复制
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

在这种情况下,如何在Python中创建结构化数组?

更新

它们都是变量,在运行时它们的形状会发生变化,但是list和数组的列数都是相同的。

EN

回答 3

Stack Overflow用户

发布于 2015-04-04 14:03:25

如果你想在纯numpy中做这件事,你可以

代码语言:javascript
运行
复制
A = np.array(['P', 'Q', 'R', 'S', 'T', 'U'])
B = np.array([[ 1,  2,  3,  4,  5,  6],
              [ 7,  8,  9, 10, 11, 12],
              [13, 14, 15, 16, 17, 18],
              [19, 20, 21, 22, 23, 24]])

# define the structured array with the names from A
C = np.zeros(B.shape[0],dtype={'names':A,'formats':['f8','f8','f8','f8','f8','f8']})

# copy the data from B into C
for i,n in enumerate(A):
    C[n] = B[:,i]

C['Q']
array([  2.,   8.,  14.,  20.])

编辑:您可以使用以下方法使格式列表自动化

代码语言:javascript
运行
复制
C = np.zeros(B.shape[0],dtype={'names':A,'formats':['f8' for x in range(A.shape[0])]})

此外,名称在C中不是以数据形式出现,而是以dtype形式出现。为了从C获取名称,可以使用

代码语言:javascript
运行
复制
C.dtype.names
票数 2
EN

Stack Overflow用户

发布于 2015-04-04 13:54:25

这就是熊猫库的用途:

代码语言:javascript
运行
复制
>>> A = ['P', 'Q', 'R', 'S', 'T', 'U']
>>> B = np.arange(1, 25).reshape(4, 6)
>>> B
array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12],
       [13, 14, 15, 16, 17, 18],
       [19, 20, 21, 22, 23, 24]])
>>> import pandas as pd
>>> pd.DataFrame(B, columns=A)
    P   Q   R   S   T   U
0   1   2   3   4   5   6
1   7   8   9  10  11  12
2  13  14  15  16  17  18
3  19  20  21  22  23  24
>>> df = pd.DataFrame(B, columns=A)
>>> df['P']
0     1
1     7
2    13
3    19
Name: P, dtype: int64
>>> df['T']
0     5
1    11
2    17
3    23
Name: T, dtype: int64
>>>
  • http://pandas.pydata.org/pandas-docs/dev/tutorials.html
票数 1
EN

Stack Overflow用户

发布于 2015-04-04 14:09:27

您的错误发生在:

代码语言:javascript
运行
复制
D = C['P']

下面是一种简单的方法,在标题行中使用常规Python列表。

代码语言:javascript
运行
复制
import numpy as np
A = (['P', 'Q', 'R', 'S', 'T', 'U'])
B = np.array([[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], 
    [13, 14, 15, 16, 17, 18], [19, 20, 21, 22, 23, 24]])
C = np.vstack((A, B))
print (C)
D = C[0:len(C), list(C[0]).index('P')]
print (D)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29447164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档