拆分Pandas列并关联另一DataFrame时遇KeyError: 'col4'求助
解决DataFrame拆分列关联后出现KeyError的问题
你代码里的问题很明确:
- 你在
merge时错误地关联了df1,但df1里根本没有col4列,col4是df2的专属列,这直接导致了KeyError。 - 拆分col2后,每个元素带空格(比如拆分"abc, df"得到的" df"),和df2里无空格的col4值(比如"abc")无法匹配,会导致后续关联不到数据。
- 最后你的groupby和agg逻辑也偏离需求,原需求是保留原始的逗号分隔col2,而非合并col1。
修正后的完整代码
import pandas as pd # 构造示例数据 df1 = pd.DataFrame({'col1': ['a', 'b', 'c'], 'col2': ['abc, df', 'ert', 'xyz, ghi']}) df2 = pd.DataFrame({'col3': ['id1', 'id2', 'id3'], 'col4': ['abc', 'erg', 'ghi']}) # 1. 用新列存储拆分后的值,避免覆盖原始col2,同时直接按带空格的分隔符拆分 df_split = df1.assign(col2_split=df1['col2'].str.split(', ')).explode('col2_split') # 2. 关联df2,用拆分后的列匹配col4 merged = df_split.merge(df2, left_on='col2_split', right_on='col4', how='inner') # 3. 筛选需要的列,得到目标结果 result = merged[['col1', 'col2', 'col3', 'col4']] print(result)
输出结果
col1 col2 col3 col4 0 a abc, df id1 abc 1 c xyz, ghi id3 ghi
关键说明
- 用
col2_split作为新列存储拆分结果,确保原始的逗号分隔col2被保留。 - 拆分时用
str.split(', ')(逗号+空格)直接拆分,避免后续还要处理空格;如果不确定分隔符是否带空格,也可以用df1['col2'].str.split(',').str.strip()统一去除每个元素的空格。 - 采用
inner连接只保留能匹配上的行,完全符合你想要的输出;如果需要保留df1的所有行,可改为how='left'。
内容的提问来源于stack exchange,提问作者rshar
相关产品推荐
相关产品推荐

