1
好吧 我已經經歷了一些與此主題相關的博客 - 但我仍然遇到同樣的問題。我有兩個數據框。兩者都有一個列X,其中有SHA2值。它包含十六進制字符串熊貓合併給出錯誤輸出
例(數據框查找)
X,Y
000000000E000394574D69637264736F66742057696E646F7773204861726477,7
0000000080000000000000090099000000040005000000000000008F2A000010,7
000000020000000000000000777700010000000000020000000040C002004600,24
0000005BC614437F6BE049237FA1DDD2083B5BA43A10175E4377A59839DC2B64,7
例(數據幀的源)
X,Z
000000000E000394574D69637264736F66742057696E646F7773204861726477,'blah'
0000000080000000000000090099000000040005000000000000008F2A000010,'blah blah'
000000020000000000000000777700010000000000020000000040C002004600,'dummy'
等
所以我現在做
lookup['X'] = lookup['X'].astype(str)
source['X'] = source['X'].astype(str)
source['newcolumn'] = source.merge(lookup, on='X', how='inner')['Y']
消息源160000行和查找有大約500,000行。
現在,當操作完成後,我得到了newcolumn,但值是錯誤的。 我確定它們沒有從X的重複值中拾取,因爲在任何表中都沒有重複的X.
所以,這真的讓我感到很蠢,在我的現場系統中給了我很大的痛苦。任何人都可以提出什麼問題?
我現在已經取代了電話與
def getReputation(lookupDF,value,lookupcolumn,default):
lookupRows = lookupDF.loc[lookupDF['X']==value]
if lookupRows.shape[0]>0:
return lookupRows[lookupcolumn].values[0]
else:
return default
source['newcolumn'] = source.apply(lambda x: getReputation(lookup,x['X'],'Y',-1),axis=1)
此代碼的工作 - 但顯然它是錯誤代碼,並採取了可怕的很長一段時間。我可以對其進行多重處理 - 但問題依然存在。爲什麼合併失敗?
感謝您的幫助 RGDS
嗨 - 感謝您的評論 - 我將檢查地圖並儘快找回。 – Run2
這就像一個魅力。謝謝。不 - 我沒有改變別的。所以合併有一些問題。可能是我應該報告一個錯誤。是的,我確信在合併之前dtype和data是相同的。它適用於這幾行 - 但不是真正的數據集,這些數據集非常大。 – Run2