Pandas merge参数疑问及TypeError报错:NoneType对象无len()方法
关于Pandas Merge的keys含义与报错解答
首先来解决你对"keys"的疑惑:文档2里提到的"左侧DataFrame中用作keys的列",这里的keys就是连接键,和文档1说的"用于连接的字段名"是同一个意思,只是换了个术语表述而已。简单说,keys就是你用来让两个DataFrame做行匹配的那些列,比如你代码里的key列就是这个keys。
接下来看你遇到的TypeError: object of type 'NoneType' has no len()报错问题,原因很明确:
你在调用pd.merge()时只指定了right_on='key',但没有对应指定left_on参数。Pandas的merge逻辑里,当你明确指定了right_on(即右边的连接列),就必须同时明确指定left_on(左边的连接列)——哪怕两边的连接列名字完全一样也不能省略,否则Pandas会默认left_on为None,内部处理时就会触发这个len(None)的错误。
你可以用两种方式修正代码:
- 方式一:因为左右连接列名都是
key,直接用on参数更简洁:
df = pd.merge(left_frame, right_frame, how='right', on='key')
- 方式二:如果坚持用
right_on,必须同时加上left_on:
df = pd.merge(left_frame, right_frame, how='right', left_on='key', right_on='key')
执行这两种写法都能得到正确的右连接结果,不会再报错啦。
内容的提问来源于stack exchange,提问作者Chia Yi
相关产品推荐
相关产品推荐

