Pandas 合并 TypeError:“NoneType”类型的对象没有 len()

Posted

技术标签:

【中文标题】Pandas 合并 TypeError:“NoneType”类型的对象没有 len()【英文标题】:Pandas merge TypeError: object of type 'NoneType' has no len() 【发布时间】:2018-06-11 22:09:51 【问题描述】:

我正在尝试使用 pandas 合并 left_on 和 right_on 参数。 根据Documentation 1和Documentation 2

文档 1:指出 left_on 和 right_on 是要在左/右 DataFrame 中加入的字段名称。 文档 2:左侧 DataFrame 中用作 keys

的列

是什么意思?

以下文档 1:

left_frame = pd.DataFrame('key': range(5),
                       'left_value': ['a', 'b', 'c', 'd', 'e'])
right_frame = pd.DataFrame('key': range(2,7),
                       'right_value': ['f', 'g', 'h', 'i', 'j'])

我这样做了:

df = pd.merge(left_frame,right_frame,how='right',right_on='key')

left_frame 有 'key' 作为字段名,但它返回了

TypeError: object of type 'NoneType' has no len()

【问题讨论】:

【参考方案1】:

看来你需要:

df = pd.merge(left_frame, right_frame, how='right', on='key')

因为左右列名相同。

如果列名不同:

df = pd.merge(left_frame, right_frame, how='right', right_on='key1', left_on='key2')

是什么意思?

如果检查merge:

on:标签或列表

要加入的字段名称。必须在两个 DataFrame 中都可以找到。如果 on 为 None 且不合并索引,则默认在列的交集处合并。

这意味着要加入的列中的值。

【讨论】:

是的,或者需要right_on='key'left_index=True 但是需要index左df匹配值,所以需要df = pd.merge(left_frame.set_index('key'),right_frame, how='right', right_on='key', left_index=True) 我能说left_on和right_on是用来合并具有相同列但列名不同的dfs吗?

以上是关于Pandas 合并 TypeError:“NoneType”类型的对象没有 len()的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 合并错误 TypeError:“int”和“str”实例之间不支持“>”

当列中的项目是列表时,列上的合并 Pandas DataFrame 的 TypeError

pandas(11):数据合并

pandas 笔记:合并操作

pandas合并/连接

第十四节:pandas之merge()合并