Python/Numpy-用列标题和行标题保存数组

2024-04-20 14:16:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把一个2D数组保存到一个CSV文件中,其中包含行和列“header”信息(就像一个表)。我知道可以使用numpy.savetxt的header参数来保存列名,但是是否有任何简单的方法也可以将其他数组(或列表)作为数据的第一列(如行标题)?

下面是一个我目前如何做的例子。有没有更好的方法来包含这些行标题,也许是我不知道的savetxt的一些技巧?

import csv
import numpy as np

data = np.arange(12).reshape(3,4)
# Add a '' for the first column because the row titles go there...
cols = ['', 'col1', 'col2', 'col3', 'col4']
rows = ['row1', 'row2', 'row3']

with open('test.csv', 'wb') as f:
   writer = csv.writer(f)
   writer.writerow(cols)
   for row_title, data_row in zip(rows, data):
      writer.writerow([row_title] + data_row.tolist())

Tags: csvthe方法importnumpy标题fordata
1条回答
网友
1楼 · 发布于 2024-04-20 14:16:38

也许你更喜欢这样做:

# Column of row titles
rows = np.array(['row1', 'row2', 'row3'], dtype='|S20')[:, np.newaxis]
with open('test.csv', 'w') as f:
    np.savetxt(f, np.hstack((rows, data)), delimiter=', ', fmt='%s')

这是隐式地将data转换为字符串数组,在我的计算机中,每一百万个项需要大约200毫秒。

dtype'|S20'表示由20个字符组成的字符串。如果太低,你的号码就会被砍掉:

>>> np.asarray([123], dtype='|S2')
array(['12'], 
  dtype='|S2')

另一个选择,我有限的测试速度比较慢,但是给了你更多的控制,并且没有切碎的问题,就是使用np.char.mod,比如

# Column of row titles
rows = np.array(['row1', 'row2', 'row3'])[:, np.newaxis]
str_data = np.char.mod("%10.6f", data)
with open('test.csv', 'w') as f:
    np.savetxt(f, np.hstack((rows, str_data)), delimiter=', ', fmt='%s')

相关问题 更多 >