Irgendwelche Ideen, wie ich zwei Pandas-Arrays auf einem allgemein benannten Bytearray-Feld beitreten kann? Das Feld in der Quelle (Teradata) ist ein tatsächliches ByteArray, und von der Teradata-Seite kann dies nicht zu einem Zeichen oder etwas außerhalb von Teradata Erzwungenem)Pandas: Merge auf Spalte von ByteArray
Der Teradata-Export liest sich schön in ein Panda-Array. Aber ich kann zwei Tabellen mit einem allgemein benannten Feld (DatabaseId) nicht zusammenführen, wo dieses Feld ein Bytearray ist.
(Import beiden Pandas als pd und itertools)
Wenn ich eine einfache Zusammenführung von versuchen:
merge1 = pd.merge(tvm, dbase, on="DatabaseId")
bekomme ich den Fehler:
TypeError: type object argument after * must be a sequence, not itertools.imap
Ich suchte Stackoverflow und gefunden a similar problem for joining on a cell containing a collection
dbase['DBID'] = dbase.DatabaseId.apply(lambda r: type(sorted(r.iteritems())))
aber ich habe den Fehler:
AttributeError: 'bytearray' object has no attribute 'iteritems'
UPDATE
Beispiel von Daten Daten durch Pandas gesammelt
dbase = pd.read_sql('select databaseid, databasename from ud812.dbase sample 10', conn)
conn is a connection to a teradata database
Datentypen kommen aus Teradata sind Varchar für alle Säulen AUSSER:
DatabaseID = bytearray (Byte(4))
TVMID = bytearray (Byte(4))
>>> dbase.dtypes
DatabaseId object
DatabaseName object
dtype: object
>>> dbase
DatabaseId DatabaseName
0 [2, 0, 243, 185] PCDW_CRS_BBCONV3_TB
1 [2, 0, 168, 114] PAMLIF_TB
2 [2, 0, 133, 153] PADW_PRESN_TB
3 [2, 0, 29, 184] CEDW_MOBILE_TB
4 [2, 0, 190, 183] CEDW_MODEL_SCORE_TB
5 [2, 0, 71, 55] PBBBAM_TB
6 [2, 0, 169, 183] CEDW_OCC_TB
7 [2, 0, 201, 183] CCDW_DGTL_DEAL_TB
8 [0, 0, 139, 8] PRECDSS_TB
9 [2, 0, 142, 203] CDBDW_TB
>>>
>>>
>>> tvm.dtypes
TVMId object
DatabaseId object
TVMName object
TableKind object
CreateText object
dtype: object
>>> tvm
TVMId DatabaseId TVMName \
0 [230, 1, 41, 11, 0, 0] [2, 0, 67, 183] JCP_03538_112002
1 [214, 1, 60, 133, 0, 0] [2, 0, 186, 52] STL_AUTHNCTD_RULE_EXECN
2 [193, 2, 59, 48, 0, 0] [2, 0, 225, 150] uye177_Xsell_EM_OPCL_TB2
3 [0, 2, 235, 154, 0, 0] [2, 0, 244, 181] PL_CALCD_INVSTR_MTHLY_HIST_ST
4 [255, 1, 131, 76, 0, 0] [2, 0, 110, 63] IMH867_AVA0803_SNAP
5 [125, 1, 217, 138, 0, 0] [2, 0, 237, 153] FD_ACCT_STMT_ADR_ST
6 [224, 0, 80, 233, 0, 0] [2, 0, 243, 127] EXP_SRCH_RSLT_DESC
7 [208, 1, 72, 15, 0, 0] [2, 0, 8, 57] SGI_PAY_DENIED_SEP_112012
8 [246, 0, 27, 61, 0, 0] [2, 0, 143, 130] CR_INDIVD
9 [186, 1, 242, 167, 0, 0] [0, 0, 244, 18] wzu448_sb_apps
TableKind CreateText
0 T None
1 V CREATE VIEW ... ... ... ... ... ... ... ... ...
2 T None
3 V CREATE VIEW ... ... ... ... ... ... ... ... ...
4 T None
5 V CREATE VIEW ... ... ... ... ... ... ... ... ...
6 V CREATE VIEW ... ... ... ... ... ... ... ... ...
7 V CREATE VIEW ... ... ... ... ... ... ... ... ...
8 V CREATE VIEW ... ... ... ... ... ... ... ... ...
9 T None
Was ist die Art von 'tvm'? Können Sie eine Probe Ihrer Daten zur Verfügung stellen? –
Nun, Sie können BYTEs mit der Funktion FROM_BYTES in einen String konvertieren. Es ist hässlich Syntax, weil Sie LPAD verwenden müssen (führende Nullen werden ignoriert) und TRANSLATE (Ergebnis ist in Unicode) und ein CAST (LPAD gibt ein VARCHAR (32000) zurück: 'CAST (TRANSLATE (LPAD (FROM_BYTES (tvmid, 'Base16') , 12, '0') VERWENDUNG von unicode_to_latin) AS VARCHAR (12)) '(** 12 ** ist doppelt so viele Bytes) – dnoeth