合并含列表的DataFrame列失败的问题与解决方法
Pandas按列表类型列合并报错?转成元组就搞定!
先看实际场景示例,我们有两个包含列表类型列的DataFrame:
import pandas as pd df1 = pd.DataFrame({'a':list('ab'), 'b':[[1,2],[4,5]]}) print(df1) # a b # 0 a [1, 2] # 1 b [4, 5] df2 = pd.DataFrame({'c':list('cd'), 'b':[[1,7],[4,5]]}) print(df2) # b c # 0 [1, 7] c # 1 [4, 5] d
当尝试直接以列表类型的b列为键合并时:
df = pd.merge(df1, df2, on='b')
会触发如下错误:
TypeError: type object argument after * must be a sequence, not map
这是因为Pandas的merge无法直接将可变序列(比如列表)作为合并键来处理。解决思路很简单,把列表转换为不可变的元组类型即可:
df1['b'] = df1['b'].apply(tuple) df2['b'] = df2['b'].apply(tuple) df = pd.merge(df1, df2, on='b') print(df) # a b c # 0 b (4, 5) d
这样就能顺利得到匹配的合并结果了!
内容的提问来源于stack exchange,提问作者jezrael
相关产品推荐
相关产品推荐

