所以我有两个DataFrame,每个都有很多列,一个来自一个新的查找表,另一个是已存储在我的数据库中的已知值。唯一具有相同名称的列是hash
,但其中一列有id
而另一列有Id
(是错误的命名!)然后我调用:
lookup = lookup.merge(known, on='hash', how='left')
lookup = lookup.rename(columns={'Id':'db_id'})
你知道要合并它们并更新名称,以便我不必记住哪一个是Id
,哪个是id
,我之前已经调过几行
known = known.rename(columns={'Hash':'hash'})
因此,我可以预先形成哈希,一切都很好,对世界也是如此。然后我去改变我的散列算法,更新我的数据库并重新运行。现在,像
lookup = lookup.rename(columns={'Id':'db_id'})
不会抛出错误,但会导致一个非常长的错误字符串,结尾于:
/usr/lib/python2.7/dist-packages/pandas/core/frame.pyc in _apply_standard(self, func, axis, ignore_failures)
4489 # no k defined yet
4490 pass
-> 4491 raise e
4492
4493
TypeError: ("'NoneType' object is not iterable", u'occurred at index hash')
存储在lookup
中,您知道这是一个问题。如果我将我的代码更改为:
known = known.rename(columns={'Hash':'hash', 'Id':'db_id'})
lookup = lookup.merge(known, on='hash', how='left')
对于这个世界来说,一切都是好的和正确的,除非我对它的方式感到非常困惑,然后不再有效。