将行/列标题添加到NumPy数组

emm*_*ras 24 python numpy matrix

我有一个NumPy ndarray我想添加行/列标题.

数据实际上是7x12x12,但我可以这样表示:

  A=[[[0, 1, 2, 3, 4, 5],
      [1, 0, 3, 4, 5, 6],
      [2, 3, 0, 5, 6, 7],
      [3, 4, 5, 0, 7, 8],
      [4, 5, 6, 7, 0, 9],
      [5, 6, 7, 8, 9, 0]]


     [[0, 1, 2, 3, 4, 5],
      [1, 0, 3, 4, 5, 6],
      [2, 3, 0, 5, 6, 7],
      [3, 4, 5, 0, 7, 8],
      [4, 5, 6, 7, 0, 9],
      [5, 6, 7, 8, 9, 0]]]
Run Code Online (Sandbox Code Playgroud)

其中A是我的2x6x6阵列.

如何在第一行和第一列中插入标题,以便每个数组在我的CSV输出文件中看起来像这样?

        A, a, b, c, d, e, f 
        a, 0, 1, 2, 3, 4, 5,
        b, 1, 0, 3, 4, 5, 6,
        c, 2, 3, 0, 5, 6, 7,
        d, 3, 4, 5, 0, 7, 8,
        e, 4, 5, 6, 7, 0, 9,
        f, 5, 6, 7, 8, 9, 0
Run Code Online (Sandbox Code Playgroud)

现在,我所做的是使数组7x13x13并插入数据,使得我有一行零列,但我更喜欢字符串.

我想我可以写一个Excel宏来用字符串替换零.但是,问题是NumPy无法转换stringfloat,如果我尝试将这些零重新分配为我想要的字符串.

bmu*_*bmu 32

随着pandas.DataFrame.to_csv你可以写列和索引文件:

import numpy as np
import pandas as pd

A = np.random.randint(0, 10, size=36).reshape(6, 6)
names = [_ for _ in 'abcdef']
df = pd.DataFrame(A, index=names, columns=names)
df.to_csv('df.csv', index=True, header=True, sep=' ')
Run Code Online (Sandbox Code Playgroud)

会给你以下df.csv文件:

  a b c d e f 
a 1 5 5 0 4 4 
b 2 7 5 4 0 9 
c 6 5 6 9 7 0 
d 4 3 7 9 9 3 
e 8 1 5 1 9 0 
f 2 8 0 0 5 1    
Run Code Online (Sandbox Code Playgroud)

  • 这特别有用,因为它包含导入命令和有关如何写入文件的信息.真棒. (2认同)

Phi*_*per 13

Numpy将处理n维数组的罚款,但可能的设施仅限于二维数组.甚至不确定您希望输出文件的外观.

许多希望命名列的人忽略了numpy 的recarray()功能.要知道的好东西,但只是"命名"一个维度.

对于两个维度,熊猫非常酷.

In [275]: DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6])],
   .....:                      orient='index', columns=['one', 'two', 'three'])
Out[275]: 
   one  two  three
A    1    2      3
B    4    5      6
Run Code Online (Sandbox Code Playgroud)

如果输出是你试图在这里解决的唯一问题,我可能会坚持使用几行手写魔法,因为它比为一个功能安装另一个包的重量要小.