Python 错误的输出
嗯 我已经浏览了一些与这个话题相关的博客,但我仍然遇到同样的问题。我有两个数据帧。两者都有一个X列,其中包含SHA2值。它包含十六进制字符串 示例(数据帧查找) 示例(数据帧源) 等等 所以现在我在做什么Python 错误的输出,python,pandas,dataframe,Python,Pandas,Dataframe,嗯 我已经浏览了一些与这个话题相关的博客,但我仍然遇到同样的问题。我有两个数据帧。两者都有一个X列,其中包含SHA2值。它包含十六进制字符串 示例(数据帧查找) 示例(数据帧源) 等等 所以现在我在做什么 lookup['X'] = lookup['X'].astype(str) source['X'] = source['X'].astype(str) source['newcolumn'] = source.merge(lookup, on='X', how='inner')['Y'] 源
lookup['X'] = lookup['X'].astype(str)
source['X'] = source['X'].astype(str)
source['newcolumn'] = source.merge(lookup, on='X', how='inner')['Y']
源有160000行,查找大约有500000行
现在,当操作完成时,我得到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在这种情况下,我会使用以下方法:
首先将“X”设置为查找中的索引
DF:
In [58]: lookup.set_index('X', inplace=True)
In [59]: lookup
Out[59]:
Y
X
000000000E000394574D69637264736F66742057696E646F7773204861726477 7
0000000080000000000000090099000000040005000000000000008F2A000010 7
000000020000000000000000777700010000000000020000000040C002004600 24
0000005BC614437F6BE049237FA1DDD2083B5BA43A10175E4377A59839DC2B64 7
In [60]: df['Y'] = df.X.map(lookup.Y)
In [61]: df
Out[61]:
X Z Y
0 000000000E000394574D69637264736F66742057696E646F7773204861726477 blah 7
1 0000000080000000000000090099000000040005000000000000008F2A000010 blah blah 7
2 000000020000000000000000777700010000000000020000000040C002004600 dummy 24
实际上,您的代码对于示例DFs正常工作:
In [68]: df.merge(lookup, on='X', how='inner')
Out[68]:
X Z Y
0 000000000E000394574D69637264736F66742057696E646F7773204861726477 blah 7
1 0000000080000000000000090099000000040005000000000000008F2A000010 blah blah 7
2 000000020000000000000000777700010000000000020000000040C002004600 dummy 24
因此,检查两个DFs中的
X
列中是否有相同的数据和数据类型嘿-谢谢你的评论-我会检查地图并尽快回来。这很有效。谢谢不,我没有改变其他任何事情。因此,合并存在一些问题。也许我应该报告一个错误。是的,在合并之前,我确保数据类型和数据是相同的。它适用于这几行,但不适用于真正的数据集,因为数据集相当大。
In [58]: lookup.set_index('X', inplace=True)
In [59]: lookup
Out[59]:
Y
X
000000000E000394574D69637264736F66742057696E646F7773204861726477 7
0000000080000000000000090099000000040005000000000000008F2A000010 7
000000020000000000000000777700010000000000020000000040C002004600 24
0000005BC614437F6BE049237FA1DDD2083B5BA43A10175E4377A59839DC2B64 7
In [60]: df['Y'] = df.X.map(lookup.Y)
In [61]: df
Out[61]:
X Z Y
0 000000000E000394574D69637264736F66742057696E646F7773204861726477 blah 7
1 0000000080000000000000090099000000040005000000000000008F2A000010 blah blah 7
2 000000020000000000000000777700010000000000020000000040C002004600 dummy 24
In [68]: df.merge(lookup, on='X', how='inner')
Out[68]:
X Z Y
0 000000000E000394574D69637264736F66742057696E646F7773204861726477 blah 7
1 0000000080000000000000090099000000040005000000000000008F2A000010 blah blah 7
2 000000020000000000000000777700010000000000020000000040C002004600 dummy 24