numpy数组元素中的Inconistance间距

时间:2017-01-15 02:02:54

标签: python numpy

在python中,当我说 np.array([1,2,3])时,结果是

array([1, 2, 3])

但当我说 np.array([11,22,3])时,结果是

array([11, 22,  3]) 

在' 3'之前有两个空格不像' 22'之前有一个空格。后来我使用map函数从带有Pandas的CSV文件中读取此结果

appended_data.append({'array': numpyarray})
OutputDataFrame = pd.DataFrame(appended_data).ix[:, columns]
OutputDataFrame.to_csv('name.csv', index=False)

我需要间距保持一致。有没有办法这样做?

2 个答案:

答案 0 :(得分:3)

数组的默认显示是每个元素的统一字段宽度,而不是均匀的间距:

In [30]: x=np.array([11,223,3])

In [31]: x
Out[31]: array([ 11, 223,   3])

In [32]: x.tolist()      # list display with uniform spacing
Out[32]: [11, 223, 3]

实际上numpy使用的格式如下:

In [35]: fmt = '  '.join(['%3d','%3d','%3d'])

In [36]: fmt
Out[36]: '%3d  %3d  %3d'

In [37]: fmt%tuple(x)
Out[37]: ' 11  223    3'

np.savetxt就是这么做的,使用您提供的fmtdelimiter

csv代表“以逗号分隔”。标签也被使用。如果使用“白色空间”,优秀读者就会对一个,两个或更多“空白”感到高兴。这些表通常被格式化以保持列对齐,而不是保持数字之间的空间不变。

具有混合数字大小的3行数组:

In [39]: x=np.array([[1,123,32],[34,1,2],[0,23,1000]])

In [40]: x
Out[40]: 
array([[   1,  123,   32],
       [  34,    1,    2],
       [   0,   23, 1000]])

固定宽度csv格式:

In [41]: np.savetxt('test.csv',x,fmt='%5d', delimiter=',')

In [42]: cat test.csv
    1,  123,   32
   34,    1,    2
    0,   23, 1000

分隔阅读:

In [43]: np.genfromtxt('test.csv',delimiter=',',dtype=None)
Out[43]: 
array([[   1,  123,   32],
       [  34,    1,    2],
       [   0,   23, 1000]])

Python字符串拆分的默认模式使用通用空格:

In [44]: ' 11  223    3'.split()
Out[44]: ['11', '223', '3']

以下是具有恒定间距(和可变宽度)的csv的示例

In [45]: np.savetxt('test.csv',x,fmt='%d', delimiter=' ')

In [46]: cat test.csv
1 123 32
34 1 2
0 23 1000

np.genfromtxt('test.csv',dtype=None)读得很好。

答案 1 :(得分:1)

您可以先将均匀间隔的numpy数组转换为列表:

<span dir="rtl"><</span>

会给你

np.array([11, 22,  3]).tolist()

另外,当您映射numpy数组时,传递给函数的每个单独值都没有间距,因此您不必担心它。

请参阅hpaulj's answer below因为它比我的更全面。