gpt4 book ai didi

python-2.7 - `TypeError: invalid type promotion` 附加到异构 numpy 数组时

转载 作者:行者123 更新时间:2023-12-03 15:05:14 29 4
gpt4 key购买 nike

我创建了一个数组:

Ticket_data = np.empty((0,7),
dtype='str,datetime64[m],datetime64[m],str,str,str,str')

我正在尝试附加数据:
lineitem = [str(data[0][0]), OpenDT, CloseDT, str(data[0][11]),
str(data[0][12]), str(data[0][13]), str(data[0][14])]
OpenDTCloseDT 是使用 np.datetime64(DTstring, 'm') 创建的

我收到错误消息:
Traceback (most recent call last):
File "Daily Report.py", line 25, in <module>
np.append(Ticket_data, np.array([lineitem]), axis=0)
File "C:\Python27\lib\site-packages\numpy\lib\function_base.py", line 3884, in append
return concatenate((arr, values), axis=axis)
TypeError: invalid type promotion

编辑:
print np.array([lineitem])

输出
[['21539' '2015-06-30T10:46-0700' '2015-06-30T10:55-0700' 'Testtext'
'Testtext2' 'Testtext3' 'Testtext5']]


print np.array([lineitem], dtype=Ticket_data.dtype)

输出
[[('', 245672259890L, datetime.datetime(1970, 1, 1, 0, 0), '', '', '', '')
('', datetime.datetime(2015, 6, 30, 17, 46), datetime.datetime(1970, 1, 1, 0, 0), '', '', '', '')
('', datetime.datetime(2015, 6, 30, 17, 55), datetime.datetime(1970, 1, 1, 0, 0), '', '', '', '')
('', 7741528753124368710L, datetime.datetime(1982, 11, 21, 6, 33), '', '', '', '')
('', 7959953343691844691L, datetime.datetime(1970, 1, 1, 0, 0), '', '', '', '')
('', datetime.datetime(5205, 7, 21, 7, 42), datetime.datetime(1970, 1, 1, 0, 0), '', '', '', '')
('', 2336635297857499728L, 2338042681633169744L, '', '', '', '')]]

我能做些什么来解决这个问题?

最佳答案

首先,结构化数组中的字段与常规 ndarray 中的维度不同。你想要你的Ticket_label数组是一维的,但该维度中的每个行元素都包含 7 个字段,例如:

Ticket_data = np.empty((0,),
dtype='str,datetime64[m],datetime64[m],str,str,str,str')

现在为了连接 lineitemTicket_data ,它必须首先从嵌套列表隐式转换为数组。由于您没有指定单独的 dtype s 对于每个字段,numpy 对待 lineitem作为一个齐次数组,并找到一个共同的 dtype每个元素都可以安全地提升到。

例如:
lineitem = ['foo', np.datetime64('1979-03-22T19:00', 'm'),
np.datetime64('1979-03-22T19:00', 'm'), 'bar', 'baz', 'a', 'b']

np.array(lineitem)
# array(['21539', '2015-06-30T10:46-0700', '2015-06-30T10:55-0700',
# 'Testtext', 'Testtext2', 'Testtext3', 'Testtext5'],
# dtype='|S21')

在此示例中,每个元素都转换为 21 长的字符串。 dtype该数组的 与 Ticket_data 的不匹配,并且由于没有安全的方法来转换 '|S21''np.datetime64[m]'你会得到一个 invalid type promotion错误。

您可以通过显式转换 lineitem 来避免该错误。到一个数组,为每个字段指定正确的 dtypes:
np.array([tuple(lineitem)], dtype=Ticket_data.dtype)

请注意,我正在转换 lineitem到一个元组 - 这对于 lineitem 中的元素是必需的被解释为单独的字段而不是单独的元素。结果是一个形状数组 (1,) (不是 (1, 7) ):
np.array([tuple(lineitem)], dtype=Ticket_data.dtype).shape
# (1,)

如果我不投 lineitem到一个元组,然后我得到一个 (1, 7)数组,其中 lineitem 中的每个单独元素被解释为 'str,datetime64[m],datetime64[m],str,str,str,str' 的序列,导致您在编辑中显示的废话。

然后可以将结果连接到 Ticket_label .

顺便说一句,我强烈建议使用 pandas而不是用于处理诸如此类的异构数据的结构化数组。

关于python-2.7 - `TypeError: invalid type promotion` 附加到异构 numpy 数组时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31172991/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com