`TypeError: Ungültiger Typ promotion", beim anfügen einer heterogenen numpy array
Habe ich erstellt ein array mit:
Ticket_data = np.empty((0,7),
dtype='str,datetime64[m],datetime64[m],str,str,str,str')
ich versuche Daten anfügen mit:
lineitem = [str(data[0][0]), OpenDT, CloseDT, str(data[0][11]),
str(data[0][12]), str(data[0][13]), str(data[0][14])]
Wo OpenDT
und CloseDT
erstellt wurden, mit np.datetime64(DTstring, 'm')
Bin ich immer die Fehlermeldung:
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
Edit:
print np.array([lineitem])
Ausgänge
[['21539' '2015-06-30T10:46-0700' '2015-06-30T10:55-0700' 'Testtext'
'Testtext2' 'Testtext3' 'Testtext5']]
und
print np.array([lineitem], dtype=Ticket_data.dtype)
Ausgänge
[[('', 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, '', '', '', '')]]
Was kann ich tun, um dieses Problem beheben?
Bezüglich der Bearbeitung, sollten Sie weglassen, die zusätzlichen Klammern um
Dann gibt er mir einen dimensionalen Fehler, wenn ich versuche
[lineitem]
(d.h. np.array(lineitem, dtype=Ticket_data.dtype)
)Dann gibt er mir einen dimensionalen Fehler, wenn ich versuche
Ticket_data = np.append(Ticket_data, np.array(lineitem, dtype=Ticket_data.dtype), axis=0)
InformationsquelleAutor Mark Omo | 2015-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens Felder in einem strukturierten array nicht das gleiche wie Abmessungen in regelmäßigen ndarray. Sie möchten, dass Ihre
Ticket_label
array 1-dimensionalen, aber für jedes row-element in dieser dimension enthalten 7 Felder, z.B.:Nun, um zu verketten
lineitem
zuTicket_data
kann, muss er zunächst implizit umgewandelt von verschachtelten Listen in ein array. Da Sie nicht angeben, separatedtype
s für jedes Feld, numpy behandeltlineitem
als eine homogene array, und findet eine gemeinsamedtype
jedes element kann sicher gefördert.Beispiel:
In diesem Beispiel, jedes element ist gegossen, um eine 21-long-string. Die
dtype
dieses array nicht mit derTicket_data
, und da gibt es keinen sicheren Weg zu werfen'|S21'
zu'np.datetime64[m]'
erhalten Sie eineinvalid type promotion
Fehler.Könnte man den Fehler vermeiden, indem Sie explizit casting
lineitem
zu einem array, die Angabe der korrekten dtypes für jedes Feld:Beachten Sie, dass ich casting
lineitem
auf ein Tupel - dies ist notwendig, um für die Elemente inlineitem
interpretiert werden als separate Felder, anstatt getrennte Elemente. Das Ergebnis ist eine Matrix der Form(1,)
(nicht(1, 7)
):Wenn ich nicht cast
lineitem
auf ein Tupel dann bekomme ich eine(1, 7)
array, wo jede einzelnen element inlineitem
wird interpretiert als ein Sequenz von'str,datetime64[m],datetime64[m],str,str,str,str'
, was sich in den Unsinn, den Sie zeigte in Ihrem Bearbeiten.Kann das Ergebnis dann verkettet werden, um
Ticket_label
.Als ein beiseite, ich empfehlen die Verwendung der pandas anstelle von strukturierten arrays für den Umgang mit heterogenen Daten, wie diese.
InformationsquelleAutor ali_m