复制数组并保留其列名

时间:2017-05-26 14:39:35

标签: python numpy

我有一个数组吧

`(datetime.datetime(2017, 4, 27, 0, 0), 2970.0, 3018.0, 2958.0, 3016.0, 4814822.0),
(datetime.datetime(2017, 4, 28, 0, 0), 3035.0, 3115.0, 3026.0, 3115.0, 6604372.0)],
 dtype=[('Timestamp', 'O'), ('open', '<f8'), ('high', '<f8'), ('low', '<f8'), ('close', '<f8'), ('atr', '<f8')])`

我想将其硬拷贝到另一个数组中,并更改目标数组列名:

destBars = bars.copy()
destBars.dtype.names=['Timestamp','hl','oh','ol','tr','atr']
bars.dtype.names
('Timestamp', 'hl', 'oh', 'ol', 'tr', 'atr')

但之后栏数列也发生了变化。这不是我的预期,我希望bars.dtype.names保持不变。

有人可以解释什么是错的,我应该怎么做?

3 个答案:

答案 0 :(得分:2)

而不是copy,使用deepcopy模块的copy

尝试以下代码并检查

import copy
destBars = copy.deepcopy(bars)

答案 1 :(得分:1)

显然,结构化数组副本会复制数据缓冲区,但仍会共享ggplot(my_data, aes(Date, Count, group = 1)) + geom_line(colour = "blue") + geom_point(colour = "blue") + geom_point(aes(y = roll_mean), colour = "red") + facet_wrap(~ID) #> Warning: Removed 3 rows containing missing values (geom_point). 个对象。我从来没有探究过这个,但我并不感到惊讶:

zzz <- "YYYYMM    Date         ID    Count
201401    01/01/2014   A     151
201401    01/01/2014   B     68
201401    01/01/2014   C     487
201401    02/01/2014   A     198
201401    02/01/2014   B     97
201401    02/01/2014   C     403"

my_data <- read_table(zzz)

对象id的匹配

dtype没有复制方法。

In [206]: x = np.ones(3, dtype='i,i') In [207]: x Out[207]: array([(1, 1), (1, 1), (1, 1)], dtype=[('f0', '<i4'), ('f1', '<i4')]) In [208]: id(x.dtype) Out[208]: 2860363240 In [209]: y = x.copy() In [210]: id(y.dtype) Out[210]: 2860363240 后跟x.dtype制作新的dtype:

descr

最好在astype之后更改名称。否则我得到一个Futurewarning。

In [5]: x=np.ones(3, 'i,i')
In [6]: dt1=np.dtype(x.dtype.descr)
In [7]: y=x.astype(dt1)
In [8]: y.dtype.names=['a','b']
In [9]: y
Out[9]: 
array([(1, 1), (1, 1), (1, 1)], 
      dtype=[('a', '<i4'), ('b', '<i4')])
In [10]: x
Out[10]: 
array([(1, 1), (1, 1), (1, 1)], 
      dtype=[('f0', '<i4'), ('f1', '<i4')])

答案 2 :(得分:0)

我认为这就是你想要的:

data.astype([('atr','atr1')])